我想使用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