使用Java操作文本文件的方法详解
生活随笔
收集整理的這篇文章主要介紹了
使用Java操作文本文件的方法详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
使用Java操作文本文件的方法詳解
摘要: 最初java是不支持對文本文件的處理的,為了彌補這個缺憾而引入了Reader和Writer兩個類
最初java是不支持對文本文件的處理的,為了彌補這個缺憾而引入了Reader和Writer兩個類,這兩個類都是抽象類,Writer中 write(char[] ch,int off,intlength),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 plaincopy
來自為知筆記(Wiz)
摘要: 最初java是不支持對文本文件的處理的,為了彌補這個缺憾而引入了Reader和Writer兩個類
最初java是不支持對文本文件的處理的,為了彌補這個缺憾而引入了Reader和Writer兩個類,這兩個類都是抽象類,Writer中 write(char[] ch,int off,intlength),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
| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299 | 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、隨機讀取文件內容[java] view plaincopyimport 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);? }? }? 來源: <http://blog.csdn.net/smartcat86/article/details/4085739/> |
來自為知筆記(Wiz)
總結
以上是生活随笔為你收集整理的使用Java操作文本文件的方法详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: word中两个表格怎么合并在一起?(tl
- 下一篇: Java 8开发的4大顶级技巧