使用inputsteam 处理byte问题
byte b[] = new byte[1] ;
这个可以避免文件经过处理后文件变大的问题。 但是处理大文件时显得就相当吃力了。
于是new byte[1] 不是一个好的选择。
byte b[]=new byte[new File("E:/1.iso").length];
这个可以提高速度。 但是带来又一个问题就是。 这个一次性把文件写到缓存区。 对与小文件没有问题。 但是大文件。 恐怕就........
于是就想到了。我有针对的出来最后一次流的大小不就行了。
贴代码开始
public static void moveOrCopyFile(String src,String tag,boolean isMove){ try { long s=System.currentTimeMillis(); File f=new File(src); FileInputStream in=new FileInputStream(src); int fileSize=(int) f.length(); byte b[]=null; new File(tag).createNewFile(); FileOutputStream out=new FileOutputStream(tag); int cnt=fileSize/(1024*1024); //小于1M(大小根据自己的情况而定)的文件直接一次性写入。 if(cnt==0) { b=new byte[fileSize]; } else { b=new byte[1024*1024]; // 出来cnt次后 文件 跳出循环 while(in.read(b)!=-1) { out.write(b); if(--cnt==0) { break; } b=new byte[1024*1024]; } //最后一次流的大小通过取模的方式得到 b=new byte[fileSize%(1024*1024)]; } //最后一次的文件写入 in.read(b); out.write(b); // 一定要记得关闭流额。 不然其他程序那个文件无法进行操作 in.close(); out.close(); System.out.println(System.currentTimeMillis()-s); if(isMove) { f.delete(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } //System.out.println(src); //System.out.println(tag); }
外面递归移动或者拷贝文件的方法就不演示了。