使用Java操作文本文件的方法詳解
?
摘要: 最初java是不支持對文本文件的處理的,為了彌補這個缺憾而引入了Reader和Writer兩個類 ?
最初java是不支持對文本文件的處理的,為了彌補這個缺憾而引入了Reader和Writer兩個類,這兩個類都是抽象類,Writer中 write(char[] ch,int off,int
摘要: 最初java是不支持對文本文件的處理的,為了彌補這個缺憾而引入了Reader和Writer兩個類 ?
最初java是不支持對文本文件的處理的,為了彌補這個缺憾而引入了Reader和Writer兩個類,這兩個類都是抽象類,Writer中 write(char[] ch,int off,int
length),flush()和close()方法為抽象方法,Reader中read(char[] ch,int off,int length)和close()方法是抽象方法。子類應該分別實現他們。
當我們讀寫文本文件的時候,采用Reader是非常方便的,比如FileReader,InputStreamReader和BufferedReader。其中最重要的類是InputStreamReader,
它是字節轉換為字符的橋梁。你可以在構造器重指定編碼的方式,如果不指定的話將采用底層操作系統的默認編碼方式,例如GBK等。當使用FileReader讀取文件
的時候。
- FileReader?fr?=? new ?FileReader( "ming.txt" );??
- int ?ch?=? 0 ;??
- while ((ch?=?fr.read())!=- 1 ?)??
- {??
- System.out.print(( char )ch);??
- }??
其中read()方法返回的是讀取得下個字符。當然你也可以使用read(char[] ch,int off,int length)這和處理二進制文件的時候類似,不多說了。如果使用
InputStreamReader來讀取文件的時候
while((ch = isr.read())!=-1)
{
System.out.print((char)ch); ?
}
這和FileReader并沒有什么區別,事實上在FileReader中的方法都是從InputStreamReader中繼承過來的。read()方法是比較好費時間的,如果為了提高效率
{
System.out.print((char)ch); ?
}
這和FileReader并沒有什么區別,事實上在FileReader中的方法都是從InputStreamReader中繼承過來的。read()方法是比較好費時間的,如果為了提高效率
我們可以使用BufferedReader對Reader進行包裝,這樣可以提高讀取得速度,我們可以一行一行的讀取文本,使用readLine()方法。
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("ming.txt")));
String data = null;
while((data = br.readLine())!=null)
{
System.out.println(data); ?
}
當你明白了如何用Reader來讀取文本文件的時候那么用Writer寫文件同樣非常簡單。有一點需要注意,當你寫文件的時候,為了提高效率,寫入的數據會先
String data = null;
while((data = br.readLine())!=null)
{
System.out.println(data); ?
}
當你明白了如何用Reader來讀取文本文件的時候那么用Writer寫文件同樣非常簡單。有一點需要注意,當你寫文件的時候,為了提高效率,寫入的數據會先
放入緩沖區,然后寫入文件。因此有時候你需要主動調用flush()方法。與上面對應的寫文件的方法為:
- FileWriter?fw?=? new ?FileWriter( "hello.txt" );??
- String?s?=? "hello?world" ;??
- fw.write(s, 0 ,s.length());??
- fw.flush();??
- OutputStreamWriter?osw?=? new ?OutputStreamWriter( new ?FileOutputStream( "hello2.txt" ));??
- osw.write(s, 0 ,s.length());??
- osw.flush();??
- PrintWriter?pw?=? new ?PrintWriter( new ?OutputStreamWriter( new ?FileOutputStream( "hello3.txt" )), true );??
- pw.println(s);??
不要忘記用完后關閉流!下面是個小例子,幫助新手理解。其實有的時候java的IO系統是需要我們多記記的,不然哪天就生疏了。
- import ?java.io.*;??
- public ? class ?TestFile2??
- {??
- public ? static ? void ?main(String[]?args)? throws ?IOException??
- {??
- FileReader?fr?=? new ?FileReader( "ming.txt" );??
- char []?buffer?=? new ? char [ 1024 ];??
- int ?ch?=? 0 ;??
- while ((ch?=?fr.read())!=- 1 ?)??
- {??
- System.out.print(( char )ch);??
- }??
- InputStreamReader?isr?=? new ?InputStreamReader( new ?FileInputStream( "ming.txt" ));??
- while ((ch?=?isr.read())!=- 1 )??
- {??
- System.out.print(( char )ch);??
- }??
- BufferedReader?br?=? new ?BufferedReader( new ?InputStreamReader( new ?FileInputStream( "ming.txt" )));??
- String?data?=? null ;??
- while ((data?=?br.readLine())!= null )??
- {??
- System.out.println(data);??
- }??
- FileWriter?fw?=? new ?FileWriter( "hello.txt" );??
- String?s?=? "hello?world" ;??
- fw.write(s, 0 ,s.length());??
- fw.flush();??
- OutputStreamWriter?osw?=? new ?OutputStreamWriter( new ?FileOutputStream( "hello2.txt" ));??
- osw.write(s, 0 ,s.length());??
- osw.flush();??
- PrintWriter?pw?=? new ?PrintWriter( new ?OutputStreamWriter( new ?FileOutputStream( "hello3.txt" )), true );??
- pw.println(s);??
- fr.close();??
- isr.close();??
- br.close();??
- fw.close();??
- osw.close();??
- pw.close();??
- }??
- }??
java中多種方式讀文件
一、多種方式讀文件內容。
1、按字節讀取文件內容
2、按字符讀取文件內容
3、按行讀取文件內容
4、隨機讀取文件內容
- import ?java.io.BufferedReader;??
- import ?java.io.File;??
- import ?java.io.FileInputStream;??
- import ?java.io.FileReader;??
- import ?java.io.IOException;??
- import ?java.io.InputStream;??
- import ?java.io.InputStreamReader;??
- import ?java.io.RandomAccessFile;??
- import ?java.io.Reader;??
- public ? class ?ReadFromFile?{??
- /** ?
- *?以字節為單位讀取文件,常用于讀二進制文件,如圖片、聲音、影像等文件。 ?
- *?@param?fileName?文件的名 ?
- */ ??
- public ? static ? void ?readFileByBytes(String?fileName){??
- File?file?=? new ?File(fileName);??
- InputStream?in?=? null ;??
- try ?{??
- System.out.println( "以字節為單位讀取文件內容,一次讀一個字節:" );??
- //?一次讀一個字節 ??
- in?=? new ?FileInputStream(file);??
- int ?tempbyte;??
- while ((tempbyte=in.read())?!=?- 1 ){??
- System.out.write(tempbyte);??
- }??
- in.close();??
- }? catch ?(IOException?e)?{??
- e.printStackTrace();??
- return ;??
- }??
- try ?{??
- System.out.println( "以字節為單位讀取文件內容,一次讀多個字節:" );??
- //一次讀多個字節 ??
- byte []?tempbytes?=? new ? byte [ 100 ];??
- int ?byteread?=? 0 ;??
- in?=? new ?FileInputStream(fileName);??
- ReadFromFile.showAvailableBytes(in);??
- //讀入多個字節到字節數組中,byteread為一次讀入的字節數 ??
- while ?((byteread?=?in.read(tempbytes))?!=?- 1 ){??
- System.out.write(tempbytes,? 0 ,?byteread);??
- }??
- }? catch ?(Exception?e1)?{??
- e1.printStackTrace();??
- }? finally ?{??
- if ?(in?!=? null ){??
- try ?{??
- in.close();??
- }? catch ?(IOException?e1)?{??
- margin: 0px; border-left: #6ce26c 3px sol
發表評論
- 瀏覽: 4653 次
-
性別:
- 來自: 秦皇島
-
最近訪客 更多訪客>>
最新評論
-
niweiwei
: 能不能整一個完整的代碼上了,看著太費勁了
JasperReport導出各種格式rtf,xls,pdf等
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

評論