java读写文件大全
生活随笔
收集整理的這篇文章主要介紹了
java读写文件大全
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
使用Java操作文本文件的方法詳解 【http://blog.csdn.net/smartcat86/article/details/4085739/】
摘要: 最初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讀取文件 的時候。 [java]?view plaincopyFileReader?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()方法是比較好費時間的,如果為了提高效率 我們可以使用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寫文件同樣非常簡單。有一點需要注意,當你寫文件的時候,為了提高效率,寫入的數據會先 放入緩沖區,然后寫入文件。因此有時候你需要主動調用flush()方法。與上面對應的寫文件的方法為:
[java]?view plaincopyFileWriter?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系統是需要我們多記記的,不然哪天就生疏了。
[java]?view plaincopyimport?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();?? }?? }?? 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)?{?? }?? }?? }?? }?? /**? *?以字符為單位讀取文件,常用于讀文本,數字等類型的文件? *?@param?fileName?文件名? */?? public?static?void?readFileByChars(String?fileName){?? File?file?=?new?File(fileName);?? Reader?reader?=?null;?? try?{?? System.out.println("以字符為單位讀取文件內容,一次讀一個字節:");?? //?一次讀一個字符?? reader?=?new?InputStreamReader(new?FileInputStream(file));?? int?tempchar;?? while?((tempchar?=?reader.read())?!=?-1){?? //對于windows下,rn這兩個字符在一起時,表示一個換行。?? //但如果這兩個字符分開顯示時,會換兩次行。?? //因此,屏蔽掉r,或者屏蔽n。否則,將會多出很多空行。?? if?(((char)tempchar)?!=?'r'){?? System.out.print((char)tempchar);?? }?? }?? reader.close();?? }?catch?(Exception?e)?{?? e.printStackTrace();?? }?? try?{?? System.out.println("以字符為單位讀取文件內容,一次讀多個字節:");?? //一次讀多個字符?? char[]?tempchars?=?new?char[30];?? int?charread?=?0;?? reader?=?new?InputStreamReader(new?FileInputStream(fileName));?? //讀入多個字符到字符數組中,charread為一次讀取字符數?? while?((charread?=?reader.read(tempchars))!=-1){?? //同樣屏蔽掉r不顯示?? if?((charread?==?tempchars.length)&&(tempchars[tempchars.length-1]?!=?'r')){?? System.out.print(tempchars);?? }else{?? for?(int?i=0;?i<charread;?i++){?? if(tempchars[i]?==?'r'){?? continue;?? }else{?? System.out.print(tempchars[i]);?? }?? }?? }?? }?? }?catch?(Exception?e1)?{?? e1.printStackTrace();?? }finally?{?? if?(reader?!=?null){?? try?{?? reader.close();?? }?catch?(IOException?e1)?{?? }?? }?? }?? }?? /**? *?以行為單位讀取文件,常用于讀面向行的格式化文件? *?@param?fileName?文件名? */?? public?static?void?readFileByLines(String?fileName){?? File?file?=?new?File(fileName);?? BufferedReader?reader?=?null;?? try?{?? System.out.println("以行為單位讀取文件內容,一次讀一整行:");?? reader?=?new?BufferedReader(new?FileReader(file));?? String?tempString?=?null;?? int?line?=?1;?? //一次讀入一行,直到讀入null為文件結束?? while?((tempString?=?reader.readLine())?!=?null){?? //顯示行號?? System.out.println("line?"?+?line?+?":?"?+?tempString);?? line++;?? }?? reader.close();?? }?catch?(IOException?e)?{?? e.printStackTrace();?? }?finally?{?? if?(reader?!=?null){?? try?{?? reader.close();?? }?catch?(IOException?e1)?{?? }?? }?? }?? }?? /**? *?隨機讀取文件內容? *?@param?fileName?文件名? */?? public?static?void?readFileByRandomAccess(String?fileName){?? RandomAccessFile?randomFile?=?null;?? try?{?? System.out.println("隨機讀取一段文件內容:");?? //?打開一個隨機訪問文件流,按只讀方式?? randomFile?=?new?RandomAccessFile(fileName,?"r");?? //?文件長度,字節數?? long?fileLength?=?randomFile.length();?? //?讀文件的起始位置?? int?beginIndex?=?(fileLength?>?4)???4?:?0;?? //將讀文件的開始位置移到beginIndex位置。?? randomFile.seek(beginIndex);?? byte[]?bytes?=?new?byte[10];?? int?byteread?=?0;?? //一次讀10個字節,如果文件內容不足10個字節,則讀剩下的字節。?? //將一次讀取的字節數賦給byteread?? while?((byteread?=?randomFile.read(bytes))?!=?-1){?? System.out.write(bytes,?0,?byteread);?? }?? }?catch?(IOException?e){?? e.printStackTrace();?? }?finally?{?? if?(randomFile?!=?null){?? try?{?? randomFile.close();?? }?catch?(IOException?e1)?{?? }?? }?? }?? }?? /**? *?顯示輸入流中還剩的字節數? *?@param?in? */?? private?static?void?showAvailableBytes(InputStream?in){?? try?{?? System.out.println("當前字節輸入流中的字節數為:"?+?in.available());?? }?catch?(IOException?e)?{?? e.printStackTrace();?? }?? }?? public?static?void?main(String[]?args)?{?? String?fileName?=?"C:/temp/newTemp.txt";?? ReadFromFile.readFileByBytes(fileName);?? ReadFromFile.readFileByChars(fileName);?? ReadFromFile.readFileByLines(fileName);?? ReadFromFile.readFileByRandomAccess(fileName);?? }?? }?? 二、將內容追加到文件尾部?? import?java.io.FileWriter;?? import?java.io.IOException;?? import?java.io.RandomAccessFile;?? /**? *?將內容追加到文件尾部? */?? public?class?AppendToFile?{?? /**? *?A方法追加文件:使用RandomAccessFile? *?@param?fileName?文件名? *?@param?content?追加的內容? */?? public?static?void?appendMethodA(String?fileName,?? ?? String?content){?? try?{?? //?打開一個隨機訪問文件流,按讀寫方式?? RandomAccessFile?randomFile?=?new?RandomAccessFile(fileName,?"rw");?? //?文件長度,字節數?? long?fileLength?=?randomFile.length();?? //將寫文件指針移到文件尾。?? randomFile.seek(fileLength);?? randomFile.writeBytes(content);?? randomFile.close();?? }?catch?(IOException?e){?? e.printStackTrace();?? }?? }?? /**? *?B方法追加文件:使用FileWriter? *?@param?fileName? *?@param?content? */?? public?static?void?appendMethodB(String?fileName,?String?content){?? try?{?? //打開一個寫文件器,構造函數中的第二個參數true表示以追加形式寫文件?? FileWriter?writer?=?new?FileWriter(fileName,?true);?? writer.write(content);?? writer.close();?? }?catch?(IOException?e)?{?? e.printStackTrace();?? }?? }?? public?static?void?main(String[]?args)?{?? String?fileName?=?"C:/temp/newTemp.txt";?? String?content?=?"new?append!";?? //按方法A追加文件?? AppendToFile.appendMethodA(fileName,?content);?? AppendToFile.appendMethodA(fileName,?"append?end.?n");?? //顯示文件內容?? ReadFromFile.readFileByLines(fileName);?? //按方法B追加文件?? AppendToFile.appendMethodB(fileName,?content);?? AppendToFile.appendMethodB(fileName,?"append?end.?n");?? //顯示文件內容?? ReadFromFile.readFileByLines(fileName);?? }?? }??
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
摘要: 最初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讀取文件 的時候。 [java]?view plaincopy
其中read()方法返回的是讀取得下個字符。當然你也可以使用read(char[] ch,int off,int length)這和處理二進制文件的時候類似,不多說了。如果使用 InputStreamReader來讀取文件的時候 while((ch = isr.read())!=-1)
{
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寫文件同樣非常簡單。有一點需要注意,當你寫文件的時候,為了提高效率,寫入的數據會先 放入緩沖區,然后寫入文件。因此有時候你需要主動調用flush()方法。與上面對應的寫文件的方法為:
[java]?view plaincopy
不要忘記用完后關閉流!下面是個小例子,幫助新手理解。其實有的時候java的IO系統是需要我們多記記的,不然哪天就生疏了。
[java]?view plaincopy
java中多種方式讀文件
一、多種方式讀文件內容。
1、按字節讀取文件內容
2、按字符讀取文件內容
3、按行讀取文件內容
4、隨機讀取文件內容
總結
以上是生活随笔為你收集整理的java读写文件大全的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Design Pattern in Ja
- 下一篇: Fedora 15 16 17 18 2