大神們,來新問題了
為什么這樣可以復(fù)制成功文件但是字節(jié)數(shù)目卻變了,如下 package?InputStreamUtil; import?java.io.File; import?java.io.FileInputStream; import?java.io.FileNotFoundException; import?java.io.FileOutputStream; import?java.io.IOException; import?java.io.InputStreamReader; import?java.io.OutputStreamWriter; public?class?InputRaderDemo?{ public?static?void?main(String[]?args)?throws?IOException?{ Long?start?=?System.currentTimeMillis(); File?file?=?new?File("G:/深淵黨專屬補(bǔ)丁套裝/file.txt")?; File?file1?=?new?File("G:/深淵黨專屬補(bǔ)丁套裝/file1.txt")?; if(!file1.isFile()){ file1.createNewFile(); } InputStreamReader?isr?=?new?InputStreamReader(new?FileInputStream(file)); OutputStreamWriter?osw?=?new?OutputStreamWriter(new?FileOutputStream(file1)); char?[]buffer?=?new?char[8*1024]; isr.read(buffer,0,buffer.length); String?s?=?new?String(buffer,0,buffer.length); System.out.println(s); osw.write(buffer,0,buffer.length); Long?end?=?System.currentTimeMillis(); isr.close(); System.out.println("花費(fèi)了"+(end?-?start)+"毫秒"); } }
而這樣卻只是創(chuàng)建了文件,而沒有復(fù)制成功,如下
package InputStreamUtil;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class InputRaderDemo {
public static void main(String[] args) throws IOException {
Long start = System.currentTimeMillis();
File file = new File("G:/深淵黨專屬補(bǔ)丁套裝/file.txt") ;
File file1 = new File("G:/深淵黨專屬補(bǔ)丁套裝/file1.txt") ;
if(!file1.isFile()){
file1.createNewFile();
}
InputStreamReader isr = new InputStreamReader(new FileInputStream(file));
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(file1));
char []buffer = new char[8*1024];
int x ;
while((x = isr.read(buffer,0,buffer.length))!=-1){
String s = new String(buffer,0,buffer.length);
System.out.println(s);
? ?osw.write(buffer,0,x);
}
Long end = System.currentTimeMillis();
isr.close();
System.out.println("花費(fèi)了"+(end - start)+"毫秒");
}
}
來吧,都來看看,共同進(jìn)步
2016-07-02
第一個(gè)問題:代碼第30行,osw.write(buffer,0,buffer.length);這句話會把整個(gè)buffer數(shù)組里面的內(nèi)容全部寫到file1.txt中去。buffer數(shù)組的內(nèi)容有兩部分構(gòu)成,一部分是在代碼26行,通過輸入流isr.read(buffer,0,buffer.length)讀入的源文件內(nèi)容,另一部分是buffer數(shù)組的剩余空間填充的無意義的內(nèi)容(因?yàn)閎uffer數(shù)組比你的源文件要大,肯定有剩余空間)。所以在輸出流寫文件的時(shí)候,除了寫入了源文件內(nèi)容,還把buffer數(shù)組里面的剩余空間的那些東西也寫進(jìn)文件里面了。所以最終的結(jié)果就是file1.txt比file.txt的字節(jié)數(shù)要大
第二個(gè)問題:下面的代碼確實(shí)是解決拷貝完文件,兩個(gè)文件大小不一致的一個(gè)好的寫法。但是之所以拷貝失敗,是因?yàn)槟銢]有關(guān)閉輸出流而已。。。加上osw.close();即可??磥聿魂P(guān)閉流會出現(xiàn)莫名其妙的問題,就是指的這個(gè)啊。