io流讀寫注意兩點
阿新 • • 發佈:2019-01-30
注意兩點:package com.test.study; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class CopyBigFile { public static void main(String[] args) { // TODO Auto-generated method stub File file = new File("G:/test.txt");//D:/Program Files (x86)/Java/jdk1.7.0_13/src.zip File file2 = new File("G:/test_copy.txt"); try { FileInputStream fis = new FileInputStream(file); FileOutputStream fos = new FileOutputStream(file2); byte[] tmp = new byte[140]; //返回估計剩餘位元組數 int length = fis.available() / 142 + 1; int readNum = 0; for (int i = 0; i < length; i++) { //System.out.println(i +" "+ num + " " + (char)fis.read()); //System.out.print((char)fis.read()); readNum = fis.read(tmp); //System.out.println(readNum); fos.write(tmp); } fos.write("liuhailun".getBytes()); fis.close(); fos.close(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }
1、fis.read(tmp);沒有資料時,返回-1。而tmp數組裡仍然是有前一個迴圈的資料。。。比如,前一次迴圈tmp陣列有140個數據,第二次只讀取到了40個數據。則只覆蓋了tmp前40個。後面100個數據不是空,而是前一次迴圈的資料。
2、如果第一次讀取資料不到140,會用空佔位。
fos.write(tmp);始終都是寫入140個數據,不足的用空格代替