日期:2014-05-20  浏览次数:20657 次

JAVA IO 问题
本帖最后由 yinan9 于 2013-10-18 16:54:15 编辑
使用 FileInputStream 和 FileOutputStream 进行文件复制
出现一个奇怪的问题,请大家解释一下

源文件文本:
This is test file for copying files by java

目标文件文本:
This is test file for copying files by javav

代码如下

FileInputStream input=new FileInputStream("C:\\users\\auxu\\desktop\\a.txt");
FileOutputStream output1=new FileOutputStream("C:\\users\\auxu\\desktop\\c.txt");
byte[] buffer=new byte[2];
int i=0;
while(input.available()>0){
input.read(buffer);
//System.out.println(buffer[0]+"\t"+buffer[1]);
output1.write(buffer);
System.out.println(++i);


}


为什么目标文件的文本会多出一个v呢?
如果在声明buffer的时候长度设为64(或者更大的2的N次幂),文本就会正确拷贝,后面的长度以NULL补充

------解决方案--------------------

FileInputStream input=new FileInputStream("C:\\users\\auxu\\desktop\\a.txt");
FileOutputStream output1=new FileOutputStream("C:\\users\\auxu\\desktop\\c.txt");
int i=0;
while(input.available()>0){
                        byte[] buffer=new byte[2];
input.read(buffer);
//System.out.println(buffer[0]+"\t"+buffer[1]);
output1.write(buffer);
System.out.println(++i);


}

试下
------解决方案--------------------

FileInputStream input=new FileInputStream("C:\\users\\auxu\\desktop\\a.txt");
FileOutputStream output1=new FileOutputStream("C:\\users\\auxu\\desktop\\c.txt");
byte[] buffer=new byte[2];
        int i=0;
        int size = 0;
        while(input.available()>0){
            size = input.read(buffer);
            //System.out.println(buffer[0]+"\t"+buffer[1]);
            output1.write(buffer,0,size);
            System.out.println(++i);
             
             
        }



这样就不会有这个问题的啊。