java操作文本文件

2005-02-05 14:28 作者: mingjava 出处: j2me 开发网 责任编辑: 方舟
最初 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() 方法是比较好费时间的,如果为了提高效率我们可以使用 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 = 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 系统是需要我们多记记的,不然哪天就生疏了。

   hello world i like java language
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();
  }
}

<script> var ad_cid; if (window.location.search.substring(1) != "") { ad_cid = window.location.search.substring(1); } else { ad_cid = 412; } </script> 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值