Java操作文件简谈
来源:互联网 发布:java loader.getparent 编辑:程序博客网 时间:2024/06/16 22:54
传说很久以前的Java是不支持对文本文件的处理的, 后来为了弥补这个遗憾而新引入了Reader和Writer两个抽象类.
最常用的就是Writer中的write(char[] ch,int off,int length)/flush()/close()以及Reader中的read(char[] ch,int off,int length)和close()方法都是抽象方法.
子类分别实现他们. 例如: FileReader和FileWriter类.
上面的代码执行后, c.txt中并没有数据, 那是因为缓冲区未能正常刷新, 可以去掉上面的fw.flush();前的注释.
注释掉了fw.flush();但是文件中却有内容, 这就说明正常的关闭流是可以自动刷新缓冲区的. 所以, 一般情况下都尽可能地在必要的地方关闭文件流.
最常用的就是Writer中的write(char[] ch,int off,int length)/flush()/close()以及Reader中的read(char[] ch,int off,int length)和close()方法都是抽象方法.
子类分别实现他们. 例如: FileReader和FileWriter类.
简单的读取文本文件的内容可以这样实现:
import java.io.FileReader;public class Test { public static void main(String[] args) { try { FileReader fr = new FileReader("d://java.txt"); int ch = 0; while ((ch = fr.read()) != -1) { System.out.print((char) ch+""); } } catch (Exception e) { e.printStackTrace(); System.out.println("操作文件时候出问题了"); } }}但是这样读出来的文件是按照字符读出来的, 阅读起来不方便, 可以增加判定条件, 改为:
import java.io.FileReader;public class Test { public static void main(String[] args) { try { FileReader fr = new FileReader("d://java.txt"); int ch = 0; while ((ch = fr.read()) != -1) { System.out.print((char) ch+""); if(ch == 0){ System.out.println(); } } } catch (Exception e) { e.printStackTrace(); System.out.println("操作文件时候出问题了"); } }}其中, read方法返回读取到的下个字符, 但是在上面的代码中实现按行读取还得做判断, 岂不是很麻烦. 所以, 我们可以使用BufferedReader对Reader来进行封装, 这样不仅可以按
行读取文本内容(readLine()), 还能提高读取速度. 例如:
import java.io.BufferedReader;import java.io.FileInputStream;import java.io.InputStreamReader;public class Test { public static void main(String[] args) { try { BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("d://java.txt"))); String data = ""; while((data = br.readLine()) != null){ System.out.println(data); } } catch (Exception e) { e.printStackTrace(); System.out.println("操作文件时候出问题了"); } }}Reader是读取文件内容, 那么很理所应当的Writer就是要向文件中写内容, 但是在写文件的过程中, 需要注意缓冲区的问题, 这个是为了提高效率, 但是在某些情况下可能会导致缓
冲区未能正常刷新(例如下面的例子), 这样就需要我们主动调用flush()方法刷新缓冲区:
import java.io.FileWriter;public class Test {public static void main(String[] args) {try {FileWriter fw = new FileWriter("d://c.txt");String data = "hello,Mr Shu!!!!";fw.write(data, 0, data.length());// fw.flush();} catch (Exception e) {e.printStackTrace();System.out.println("操作文件时候出问题了");}}}
上面的代码执行后, c.txt中并没有数据, 那是因为缓冲区未能正常刷新, 可以去掉上面的fw.flush();前的注释.
import java.io.FileWriter;public class Test { public static void main(String[] args) { FileWriter fw = null; try { fw = new FileWriter("d://c.txt"); String data = "hello,Mr Shu!!!!"; fw.write(data, 0, data.length());// fw.flush(); } catch (Exception e) { e.printStackTrace(); System.out.println("操作文件时候出问题了"); } finally { try{ fw.close(); }catch(Exception ex){ ex.printStackTrace(); System.out.println("系统好像出问题了"); } } }}
注释掉了fw.flush();但是文件中却有内容, 这就说明正常的关闭流是可以自动刷新缓冲区的. 所以, 一般情况下都尽可能地在必要的地方关闭文件流.
0 0
- Java操作文件简谈
- java文件操作
- java文件操作大全
- java文件操作大全
- java文件操作大全
- java文件操作大全
- Java文件操作大全-
- java文件操作大全
- java文件操作大全
- Java文件操作详解
- Java文件操作大全
- Java文件操作大全
- java 文件操作大全
- Java文件操作详解
- java 文件操作大全
- Java文件操作详解
- java 文件操作大全
- Java 文件操作
- 四川移动IMS扩展————VOIP电话
- poj1426 Find The Multiple(哈夫曼思想)
- UML类图与类的关系详解
- Android Material Design Library系列教程(一)
- 工作中用到的软件、底层库列表
- Java操作文件简谈
- Ubuntu14.04 vim+Ctags+Taglist
- 数据库数据的恢复和备份
- hdu 5157 回文树
- Docker1.7 中文文档目录
- Linux进程通信---共享内存 代码实现
- DRP之javaweb开发模型Model1&Model2
- OpenSSL RSA sign and verify howto
- DOD发布三款云计算安全标准