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);
}
外面递归移动或者拷贝文件的方法就不演示了。