第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

FileInputStream fileInput = new FileInputStream("E:\\xuexi\\src.txt");

FileOutputStream fileout = new FileOutputStream("E:\\xuexi\\dest2.txt");

InputStreamReader reader = new InputStreamReader(fileInput, "GBK");

OutputStreamWriter writer=new OutputStreamWriter(fileout,"UTF-8");

int c;

char[]line=new char[10*1024];

while((c=reader.read(line,0, line.length))!=-1){

writer.write(line);

System.out.println(line);

}

fileout.close();

fileInput.close();



----輸出ouputstreamWriter的編碼貌似對寫入文件沒有影響。。請老師解答。。

正在回答

6 回答

因為你定義writer的時候就將它定義成“UTF-8”編碼了,所以他就轉換成這個編碼輸出了。看似沒影響,其實這兒輸出文件的編碼已經變成utf-8了。輸入文件本身是ANSI編碼,也就是GBK。

1 回復 有任何疑惑可以回復我~
#1

風中過客

請問 是不是這樣理解: 輸入文件本身是ANSI編碼,也就是GBK,所以 1先 new InputStreamReader(fileInput, "GBK"); GBK方式讀取 2 System.out.println(line); 因為1,所以能夠正常顯示?
2015-05-12 回復 有任何疑惑可以回復我~
#2

風中過客

3 接下來 new OutputStreamWriter(fileout,"UTF-8"); 設置 按UTF-8編碼方式把char流編碼成byte流 4 writer.write(line); 寫入到dest2.txt 文件中。 因此,如果要讀取dest2.txt中的編碼, 要按new InputStreamReader(fileInput, "UTF-8"); 才能正常顯示,對嗎?
2015-05-12 回復 有任何疑惑可以回復我~

好吧,我其實小白了,以后不會不實驗就亂回答問題的。?

正解是:有影響。

我實驗了幾次,以下是實驗步驟:

硬盤上的src.txt的默認編碼是ANSI,所以你在硬盤上測試本身就是個未知數。

1.先在你項目的src下建立src.txt,輸入幾個漢字。

2.運行測試代碼

	public?static?void?main(String[]?args)?throws?Exception?{
		
		File?file?=?new?File("src/dest.txt");
		System.out.println(file);
		FileInputStream?fileInput?=?new?FileInputStream("src/src.txt");
		FileOutputStream?fileout?=?new?FileOutputStream(file);
		InputStreamReader?reader?=?new?InputStreamReader(fileInput,?"GBK");
		OutputStreamWriter?writer?=?new?OutputStreamWriter(fileout,"utf-8");
		int?c;???
		char[]?line?=?new?char[10*1024];
		while((c?=?reader.read(line,0,?line.length))!=-1){
			writer.write(line);			
			System.out.println(line);
		}
		fileout.close();
		fileInput.close();
	}

3.refresh項目,會發(fā)現里面多了dest.txt ?里面是亂碼。

1 回復 有任何疑惑可以回復我~

額,我試了下直接寫write(line)是可以的。。。 ? 關于編碼,把GBK和utf-8位置一換就成亂碼了


0 回復 有任何疑惑可以回復我~

可能你是代碼敲錯的原因吧,沒有write(byte[])這種用法,編碼應該是有影響的。

0 回復 有任何疑惑可以回復我~

你好啊,首先我覺得你有行代碼敲錯了,倒數第5行,應該是writer.write(line,0,line.length);

line是一個字節(jié)數組,write(int c)是寫入單個字符,write(byte[],offset,length)是把內存中的字符數組,寫入到流。另外,回答你的問題,它是while循環(huán)的結束條件,如果等于-1,表示文件,讀取完畢。

0 回復 有任何疑惑可以回復我~
#1

風中過客

char[]line=new char[10*1024]; 字符數組啊
2015-05-12 回復 有任何疑惑可以回復我~

while((c=reader.read(line,0, line.length))!=-1) ? 為什么是不等于-1,??

0 回復 有任何疑惑可以回復我~
#1

Lemuria

讀到文件的末尾返回值是-1,如果!-1則是還未讀完文件,也就是未到末尾
2014-11-27 回復 有任何疑惑可以回復我~
#2

Flames

當文件讀完時返回-1,還沒讀完返回讀的個數
2014-12-22 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號