黑马程序员技术交流社区
标题:
文件复制后大小不同
[打印本页]
作者:
邵中国
时间:
2012-4-26 15:47
标题:
文件复制后大小不同
package cn.itcast.t08;
/*需求:
* 编写程序,拷贝一个带内容的文件夹。*/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.junit.Test;
public class Copy {
@Test
public void test(){
File sourFile = null;
File desFile = null;
String sourFolder = "d:/jjj";
String desFolder = "e:/copyTest";
sourFile = new File(sourFolder);
if (!sourFile.isDirectory() || !sourFile.exists()) {
System.out.println("文件夹不存在");
}
desFile = new File(desFolder);
desFile.mkdir();
copy(sourFile.listFiles(), desFile);
}
private static void copy(File[] s, File d) {
if (!d.exists())
d.mkdir();
for (int i = 0; i < s.length; i++) {
if (s[i].isFile()) {
try {
FileInputStream fis = new FileInputStream(s[i]);
FileOutputStream fos = new FileOutputStream(new File(
d.getPath() + File.separator + s[i].getName()));
int len=0;
byte[] data = new byte[1024];
if ((len=fis.read(data)) != -1) {
fos.write(data);
}
fos.close();
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (s[i].isDirectory()) {
File des = new File(d.getPath() + File.separator
+ s[i].getName());
des.mkdir();
copy(s[i].listFiles(), des);
}
}
}
}
复制后和原来的文件夹大小不一样了,怎么回事
作者:
高彰谦
时间:
2012-4-26 17:16
大哥,我要怎么说你好呢,
if ((len=fis.read(data)) != -1) {
fos.write(data);
}
复制代码
if->while then ok!
作者:
罗旭维
时间:
2012-4-26 17:24
另外fos.write(data);最好改成fos.write(data,0,len);
作者:
林德燚
时间:
2012-4-26 17:57
楼上正解;
1.拷贝语句得循环使用,得把if改while;
2、你用缓冲数组读1024个字节,write方法要用write(buf,o,len)不然你拷贝的文件总会比原文件多点,因为你都1k的拷,原文件没这么正好是1024的倍数;
作者:
chenwei
时间:
2012-4-26 19:58
拷贝必须用while或者for循环,if的话只拷贝一次
还有你用数组拷贝的话,还要加上长度,fos.write(data,0,len);
加了长度,数组里放了多少元素才拷多少元素,
除非你文件大小正好是1024的整数倍,要不然大小都会不一样
作者:
亚男
时间:
2012-4-26 20:16
If该while就不说了,
我说说第二条举个例子:假如文件大小为3000(不到3*1024)k,那你考文件是一次拷1024k个字节需要拷三次,前两次都是正好1024k在最后一次源文件只剩下952k了,最后一次拷到目标文件里还是1024k,所以就会大点,解决方法已有就不说了。
其实有个available()方法可以定义正好的缓冲区数组,但这个要慎用,因为如果源文件过大就会内存溢出
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2