天天看點

java 複制 inputstream_使用FileStream在Java中複制檔案

我想使用FileStream在Java中複制檔案.

這是我的代碼.

FileInputStream infile = new FileInputStream("in");

FileOutputStream outfile = new FileOutputStream("out");

byte[] b = new byte[1024];

while(infile.read(b, 0, 1024) > 0){

outfile.write(b);

}

infile.close();

outfile.close();

我使用vim來檢視我的檔案.

輸入檔案“in”

Hello World1

Hello World2

Hello World3

輸出檔案“輸出”

Hello World1

Hello World2

Hello World3

^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@...

輸出檔案中有許多額外的’^ @’.

輸入檔案的大小為39位元組.

輸出檔案的大小為1KB.

為什麼輸出檔案中有很多額外的字元?

解決方法:

當您調用infile.read時,傳回值會告訴您要傳回的項目數.當你調用outfile.write時,你告訴它緩沖區被填滿,因為你沒有存儲你從read調用中得到的位元組數.

要解決此問題,請存儲位元組數,然後傳遞正确的數字來寫:

byte[] b = new byte[1024];

int len;

while((len = infile.read(b, 0, 1024)) > 0){

outfile.write(b, 0, len);

}

标簽:fileinputstream,fileoutputstream,java

來源: https://codeday.me/bug/20190824/1705799.html