一般我们读写文件的时候都是这么写的,看着没问题哈。
public static void main(String[] args) throws Exception {
FileInputStream fileInput = new FileInputStream("e://test1.txt");
FileOutputStream fileOutput = new FileOutputStream("e://test2.txt");
byte[] buffer = new byte[4];
while(fileInput.read(buffer) != -1){
fileOutput.write(buffer);
System.out.println(new String(buffer));
}
fileInput.close();
fileOutput.close();
System.out.println("complete");
}
![](https://images2015.cnblogs.com/blog/360288/201612/360288-20161216105516870-850489635.png)
写的文件多了234.。。。这是为什么呢。。。
![](https://images2015.cnblogs.com/blog/360288/201612/360288-20161216105623229-721636699.png)
text1.txt里面的内容为“中国12345”,一共占9个字节。
byte[]数组长4个字节,循环第三次的时候只读取一个字节,但是第二次循环遗留下来的数据
还在数组里面,并没有清空。
![](https://images2015.cnblogs.com/blog/360288/201612/360288-20161216105742558-1651294547.png)
所以正确的写法如下:
byte要初始化一下
![](https://images2015.cnblogs.com/blog/360288/201612/360288-20161216105754995-1820513331.png)
public static void main(String[] args) throws Exception {
FileInputStream fileInput = new FileInputStream("e://test1.txt");
FileOutputStream fileOutput = new FileOutputStream("e://test2.txt");
byte[] buffer = new byte[4];
while(fileInput.read(buffer) != -1){
fileOutput.write(buffer);
System.out.println(new String(buffer));
buffer = new byte[4];
}
fileInput.close();
fileOutput.close();
System.out.println("complete");
}
后来发现这样更好:
public static void transFile() throws Exception{
FileInputStream fileInput = new FileInputStream("e://test1.txt");
FileOutputStream fileOutput = new FileOutputStream("e://test2.txt");
byte[] buffer = new byte[4];
int count = 0;
while((count = fileInput.read(buffer)) != -1){
fileOutput.write(buffer,0,count);
}
fileInput.close();
fileOutput.close();
System.out.println("complete");
}