4.9w+
社区成员
package copy;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
class CopyFile {
static String s="*";
boolean copy(String fileFrom, String fileTo) {
try {
FileInputStream in = new FileInputStream(fileFrom);
FileOutputStream out = new FileOutputStream(fileTo);
BufferedInputStream buffi = new BufferedInputStream(in);
BufferedOutputStream buffo = new BufferedOutputStream(out);
int temp = 0;
while ((temp = buffi.read()) != -1) {
buffo.write(temp);
s=s+temp;
}
buffo.flush();
in.close();
out.close();
return true;
} catch (IOException ex) {
ex.getStackTrace();
return false;
}
}
public static void main(String[] args){
CopyFile fc=new CopyFile();
if (fc.copy("in.txt", "out.txt")){
System.out.println("ok");
System.out.println(s);
}else{
System.out.println("error");
}
}
我试过10M的txt word jpg 都可以啊,什么都不少。jdk7.1[/quote]
把System.out.println(s);
s=s+temp;
这两句去了 这两句是我用来看buffi是怎么工作的;还是不行啊! 问题好像是因为buffi读取完的时候但是又一部分数据在buffo的内存里(默认大小4096k),需要再while循环后面加一句 buffo.flush()就好了
package copy;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
class CopyFile {
static String s="*";
boolean copy(String fileFrom, String fileTo) {
try {
FileInputStream in = new FileInputStream(fileFrom);
FileOutputStream out = new FileOutputStream(fileTo);
BufferedInputStream buffi = new BufferedInputStream(in);
BufferedOutputStream buffo = new BufferedOutputStream(out);
int temp = 0;
while ((temp = buffi.read()) != -1) {
buffo.write(temp);
s=s+temp;
}
buffo.flush();
in.close();
out.close();
return true;
} catch (IOException ex) {
ex.getStackTrace();
return false;
}
}
public static void main(String[] args){
CopyFile fc=new CopyFile();
if (fc.copy("in.txt", "out.txt")){
System.out.println("ok");
System.out.println(s);
}else{
System.out.println("error");
}
}
我试过10M的txt word jpg 都可以啊,什么都不少。jdk7.1你copy传的参数是new一个文件吧
问题好像是因为buffi读取完的时候但是又一部分数据在buffo的内存里(默认大小4096k),需要再while循环后面加一句 buffo.flush()就好了
如果你觉得是编码问题的话,你可以试试用DataOutputStream输出看看,这个类是能选输出编码的格式的你可以选writeBytes()或者writeUTF()不过参数是String 需要对应使用DataInputStream,或者把输入流的数据转化成字符(有点复杂需要知道编码规则);看看结果是不是不一样
你们好纠结!package test; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.channels.FileChannel; public class CopyFile{ public static final void copy(File src,File dst) throws IOException{ FileInputStream fis=new FileInputStream(src); FileChannel in=fis.getChannel(); FileOutputStream fos=new FileOutputStream(dst); FileChannel out=fos.getChannel(); in.transferTo(0,in.size(),out); fos.close(); fis.close(); } public static final void copy(String src,String dst) throws IOException{ copy(new File(src),new File(dst)); } public static void main(String...args) throws IOException{ copy("...","..."); } }
package test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
public class CopyFile{
public static final void copy(File src,File dst) throws IOException{
FileInputStream fis=new FileInputStream(src);
FileChannel in=fis.getChannel();
FileOutputStream fos=new FileOutputStream(dst);
FileChannel out=fos.getChannel();
in.transferTo(0,in.size(),out);
fos.close();
fis.close();
}
public static final void copy(String src,String dst) throws IOException{
copy(new File(src),new File(dst));
}
public static void main(String...args) throws IOException{
copy("...","...");
}
}
1.我用的是MacOSX笔记本,用文本文件测试的时候,会显示编码为Unicode,无法打开,所以我发现了编码被改变的问题,如果大家用的是windows,可能因为兼容做的好,没有提示,反倒发现不了问题了。2.每次复制出来的文件正好4M,不管源文件多大,正如你说的buffo是4096k缓存,是这样吗? @csdngameasm 也可以像8楼这样 buffo.close()因为缓存流在close()的时候会自动flush()