java中文本文件_java文本文件读写

java的IO系统中读写文件使用的是Reader和Writer两个抽象类,Reader中的read()和close()方法是抽象方法,Writer中的write()、flush()和close()方法也是抽象方法,子类应该分别实现他们。

JavaIO已经为我们提供了三个方便的Reader的实现类,FileReader、InputStreamReader和BufferReader。其中最重要的是InputStreamReader类,它是字节转换为字符的桥梁。可以再构造器重指定编码方式,如果不指定的话将采用底层操作系统的默认编码方式,例如GBK等。

首先给出一个FileReader读txt的例子,很简单。

FileReader fr = new FileReader("C:/Test.txt");int ch = 0;while((ch=fr.read())!=-1){

System.out.println((char)ch);

}

其中read方法返回的是读取的下一个字符。

再给出一个InputStramReader读txt的例子,也很简单。

1 InputStream is = new FileInputStream(newFile(filepath));2 InputStreamReader fr = new InputStreamReader(is);3 int ch = 0;4 while((ch=fr.read())!=-1){5 System.out.println((char)ch);6 }

这里可以看出这和FileReader没什么区别,只是需要用到的其他类对象比较多,可以简单理解,我要用的是InputStreamReader这个东西,所以就要有InputStreamReader来让我Reader,所以要建立一个InputStream,而这个InputStream是要读文件的,所以要用文件读取流来读文件,内部参数为文件对象。

事实上,在FileReader中的方法都是从InputStreamReader中继承过来的。

read()方法比较耗费时间,为了提高效率,我们可以使用BufferedReader对Reader进行包装,这样可以提高读取速度,进而一行一行的读取文本。

如:

1 BufferedReader br = new BufferedReader(newFileReader(filepath));2 String data = br.readLine();//一次读一行,直到null为结束

3 while(data!=null){4 System.out.println(data);5 data =br.readLine();6 }

这里注意最后读到的是null的时候结束,中间可以有多个单纯的换行而不结束。

有读就有写。写文本可以使用PrintWriter、FileWriter和BufferWriter三种方法。

代码如下

1      FileWriter fw = new FileWriter("D:/Test.txt");2 String s = "hello world";3 fw.write(s,0,s.length());4 fw.flush();5

6 OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("D:/Test1.txt"));7 osw.write(s,0,s.length());8 osw.flush();9

10 PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("D:/Test2.txt")),true);11 pw.println(s);12

13 fw.close();14 osw.close();15 pw.close();

以上代码都是从头开始写文件,先把文件原内容删掉,然后再写入新的数据,如果想接着源文件内容写,在声明FileWriter fw时,里面参数加个true就行了,即

FileWriter fw = new FileWriter("test.txt",true);

上面是FileWriter和PrintWriter的例子,再写个BufferWriter的例子,

1 File file = new File("D:/Test.txt");2 File dest = new File("D:/new.txt");3 try{4 BufferedReader reader = new BufferedReader(newFileReader(file));5 BufferedWriter writer = new BufferedWriter(newFileWriter(dest));6 String line =reader.readLine();7 while(line!=null){8 writer.write(line);9 line =reader.readLine();10 }11 writer.flush();12 reader.close();13 writer.close();14 } catch(FileNotFoundException e) {15 e.printStackTrace();16 } catch(IOException e) {17 e.printStackTrace();18 }

代码写完,下面说下他们的不同

PrintWriter  提供print系方法,以字符为单位,支持汉字。BufferedWriter   提供缓冲,用以加速

FileWriter   用于写文件

OutputStreamWriter以字节为单位,不支持汉字。

PrintWriter和BufferedWriter都是继承java.io.Writer,所以很多功能都一样。不过PrintWriter提供println()方法可以写不同平台的换行符,而BufferedWriter可以任意设定缓冲大小。

OutputStream可以直接传给PrintWriter(BufferedWriter不能接收),如:

PrintWriter out= new PrintWriter(new BufferedOutputStream(new FileOutputStream("foo.out")));

PrintStream类是过滤器类中一个不可忽视的成员,最基本的标准输出就要借助于它——我们常用的System.out变量就是PrintStream实例。与之对应的字符流类是PrintWriter类。

以上就是基本的文件读写操作内容,需要多加练习与使用才能对其有更好的理解。

本文代码均为自己手敲试验过的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值