本帖最后由 曹自祥 于 2012-11-18 20:42 编辑
我后来想想应该可以解除剪切文件有大小限制的约束,对代码进行了小改动,现在可以剪切任意大小的文件了。- package pt;
- import java.io.*;
- public class SC {
- /**
- * @param args
- * @throws IOException
- * 复制后删掉源文件就是剪切了。
- * 我写的这个可以往其他文件夹里剪切文件,
- * 把file和file_1写成同一个文件夹就是楼主的要求
- */
- public static void main(String[] args) throws IOException {
- File file=new File("F:\\mytest");
- File file_1=new File("E:\\Copy_mytest");
- if(!file_1.exists())
- file_1.mkdirs();
- find(file,file_1);
- }
- public static void find(File s,File o) throws IOException{
- File[] files=s.listFiles();
- BufferedOutputStream bos=null;
- BufferedInputStream bis=null;
- for(int i=0;i<files.length;i++){
- byte[] buf=new byte[1024*1024];
- int len=0;
- if(!files[i].isHidden()&&files[i].isDirectory())//如果是文件夹,继续往里找
- {
- find(files[i],o);
- }
- else
- {
- if(files[i].getName().endsWith(".avi"))//找到avi文件
- {
- bis=new BufferedInputStream(new FileInputStream(files[i]));//把源文件夹内的文件或文件夹关联输入流
- File f=new File(o.getAbsolutePath()+"\\"+files[i].getName());//由目的文件夹名和被剪切文件名确定新文件的绝对路径
- if(f.exists())//如果重名,删掉旧的
- f.delete();
- f.createNewFile();
- bos=new BufferedOutputStream(new FileOutputStream(f));//把新文件关联入输出流
- while((len=bis.read(buf))!=-1)
- {
- bos.write(buf, 0, len);
- }
- bos.flush();
- if(bos!=null)
- bos.close();
- if(bis!=null)
- bis.close();
- if(files[i].exists())//删掉源文件,完成剪切动作
- files[i].delete();
- }
- }
- }
- }
- }
复制代码 剪切大文件需要的时间较长,需耐心等待
我切了个700M的文件用了半分多钟,切个1.3G的用了好几分钟。切1.3G的时候看了两分钟没切完就没看了,但程序还在运行,过一会儿再看竟然切完了。 |