使用Java操作文本文件的方法详解

摘要: 最初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 = ); 

• ;  
• ((ch = fr.read())!=- )  
• { 
• System.out.print(()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()方法。与上面对应的写文件的方法为:

FileWriter fw =
); 

• String s =
; 

• fw.write(s,,s.length()); 

• fw.flush(); 

• OutputStreamWriter osw =
)); 

• osw.write(s,,s.length()); 

• osw.flush(); 

• PrintWriter pw =
)),); 

• pw.println(s);

不要忘记用完后关闭流!下面是个小例子,帮助新手理解。其实有的时候java的IO系统是需要我们多记记的,不然哪天就生疏了。


importpublicclass TestFile2 

• {  

•  IOException 

• {  

• FileReader fr =
); 

• []
 buffer = []; 

• ; 

• ((ch
 = fr.read())!=- ) 

• {  

• System.out.print(()ch); 

• }  

• )); 

• ((ch
 = isr.read())!=-) 

• {  

• System.out.print(()ch); 

• }  

• ))); 

• String data =
; 

• ((data
 = br.readLine())!=) 

• {  

• System.out.println(data); 

• }  

• ); 

• String s =
; 

• fw.write(s,,s.length()); 

• fw.flush(); 

• )); 

• osw.write(s,,s.length()); 

• osw.flush(); 

• )),); 

• pw.println(s); 

•   fr.close(); 

• isr.close(); 

• br.close(); 

• fw.close(); 

• osw.close(); 

• pw.close(); 

• }  

• }

java中多种方式读文件
一、多种方式读文件内容。
1、按字节读取文件内容
2、按字符读取文件内容
3、按行读取文件内容
4、随机读取文件内容

importimport
 java.io.FileInputStream; 

• 
 java.io.FileReader;  
• 
 java.io.IOException;  
• 
 java.io.InputStream;  
• 
 java.io.InputStreamReader;  
• 
 java.io.RandomAccessFile;  
• 
 java.io.Reader;  
•  ReadFromFile { 

• * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。

• */ 

•  readFileByBytes(String fileName){ 

• File file =
 File(fileName); 

• InputStream in =
; 

• 
 {  
• System.out.println(); 

•  

• in =
 FileInputStream(file); 

• 
 tempbyte;  
• ((tempbyte=in.read())
 != -){ 

• System.out.write(tempbyte); 

• }  

• in.close(); 

• }  (IOException e) { 

• e.printStackTrace(); 

• ; 

• }  

• 
 {  
• System.out.println(); 

•  

• []
 tempbytes = []; 

• ; 

• in =
 FileInputStream(fileName); 

• ReadFromFile.showAvailableBytes(in); 

•  

• ){ 

• System.out.write(tempbytes,
, byteread); 

• }  

• }  (Exception e1) { 

• e1.printStackTrace(); 

• }  { 

• ){ 

• 
 {  
• in.close(); 

• }  (IOException e1) { 

• }  

• }  

• }  

• }  

• * 以字符为单位读取文件,常用于读文本,数字等类型的文件

• */ 

•  readFileByChars(String fileName){ 

• File file =
 File(fileName); 

• Reader reader =
; 

• 
 {  
• System.out.println(); 

•  

• reader =

 FileInputStream(file));  
• 
 tempchar;  
• ){ 

•  

•  

•  

• )tempchar) !=
){ 

• System.out.print(()tempchar); 

• }  

• }  

• reader.close(); 

• }  (Exception e) { 

• e.printStackTrace(); 

• }  

• 
 {  
• System.out.println(); 

•  

• []
 tempchars = []; 

• ; 

• reader =

 FileInputStream(fileName));  
•  

• ){ 

•  

• ] !=
)){ 

• System.out.print(tempchars); 

• }{ 

• ;
 i<charread; i++){  
• (tempchars[i]
 == ){ 

• ; 

• }{ 

• System.out.print(tempchars[i]); 

• }  

• }  

• }  

• }  

• }  (Exception e1) { 

• e1.printStackTrace(); 

• }
 {  
• ){ 

• 
 {  
• reader.close(); 

• }  (IOException e1) { 

• }  

• }  

• }  

• }  

• * 以行为单位读取文件,常用于读面向行的格式化文件

• */ 

•  readFileByLines(String fileName){ 

• File file =
 File(fileName); 

• BufferedReader reader =
; 

• 
 {  
• System.out.println(); 

• reader =

 FileReader(file));  
• String tempString =
; 

• ; 

•  

• ){ 

•  

• System.out.println( + tempString); 

• line++; 

• }  

• reader.close(); 

• }  (IOException e) { 

• e.printStackTrace(); 

• }  { 

• ){ 

• 
 {  
• reader.close(); 

• }  (IOException e1) { 

• }  

• }  

• }  

• }  

• * 随机读取文件内容

• */ 

•  readFileByRandomAccess(String fileName){ 

• RandomAccessFile randomFile =
; 

• 
 {  
• System.out.println(); 

•  

• randomFile =
); 

•  

• 
 fileLength = randomFile.length();  
•  

• ) ?
; 

•  

• randomFile.seek(beginIndex); 

• []
 bytes = []; 

• ; 

•  

•  

• ){ 

• System.out.write(bytes,
, byteread); 

• }  

• }  (IOException e){ 

• e.printStackTrace(); 

• }  { 

• ){ 

• 
 {  
• randomFile.close(); 

• }  (IOException e1) { 

• }  

• }  

• }  

• }  

• * 显示输入流中还剩的字节数

• */ 

•  showAvailableBytes(InputStream in){ 

• 
 {  
• System.out.println(
 + in.available());  
• }  (IOException e) { 

• e.printStackTrace(); 

• }  

• }  

•  main(String[] args) { 

• String fileName =
; 

• ReadFromFile.readFileByBytes(fileName); 

• ReadFromFile.readFileByChars(fileName); 

• ReadFromFile.readFileByLines(fileName); 

• ReadFromFile.readFileByRandomAccess(fileName); 

• }  

• }  

• 二、将内容追加到文件尾部 

• 
 java.io.FileWriter;  
• 
 java.io.IOException;  
• 
 java.io.RandomAccessFile;  
• * 将内容追加到文件尾部

•  

•  AppendToFile { 

• * A方法追加文件:使用RandomAccessFile

• * @param content 追加的内容

•  

•  appendMethodA(String fileName, 

•   

• String content){ 

• 
 {  
•  

• RandomAccessFile randomFile =
); 

•  

• 
 fileLength = randomFile.length();  
•  

• randomFile.seek(fileLength); 

• randomFile.writeBytes(content); 

• randomFile.close(); 

• }  (IOException e){ 

• e.printStackTrace(); 

• }  

• }  

• * B方法追加文件:使用FileWriter

• * @param content

•  

•  appendMethodB(String fileName, String content){ 

• 
 {  
•  

• FileWriter writer =
); 

• writer.write(content); 

• writer.close(); 

• }  (IOException e) { 

• e.printStackTrace(); 

• }  

• }  

•  main(String[] args) { 

• String fileName =
; 

• String content =
; 

•  

• AppendToFile.appendMethodA(fileName, content); 

• AppendToFile.appendMethodA(fileName,
); 

•  

• ReadFromFile.readFileByLines(fileName); 

•  

• AppendToFile.appendMethodB(fileName, content); 

• AppendToFile.appendMethodB(fileName,
); 

•  

• ReadFromFile.readFileByLines(fileName); 

• }  

• }