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 = ;
while((ch=fr.read())!=-){
System.out.println((char)ch);
}

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

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

 InputStream is = new FileInputStream(new File(filepath));
InputStreamReader fr = new InputStreamReader(is);
int ch = ;
while((ch=fr.read())!=-){
System.out.println((char)ch);
}

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

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

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

如:

 BufferedReader br = new BufferedReader(new FileReader(filepath));
String data = br.readLine();//一次读一行,直到null为结束
while(data!=null){
System.out.println(data);
data = br.readLine();
}

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

有读就有写。写文本可以使用PrintWriterFileWriterBufferWriter三种方法。

代码如下

      FileWriter fw = new FileWriter("D:/Test.txt");
String s = "hello world";
fw.write(s,,s.length());
fw.flush(); OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("D:/Test1.txt"));
osw.write(s,,s.length());
osw.flush(); PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("D:/Test2.txt")),true);
pw.println(s); fw.close();
osw.close();
pw.close();

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

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

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

 File file = new File("D:/Test.txt");
File dest = new File("D:/new.txt");
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
BufferedWriter writer = new BufferedWriter(new FileWriter(dest));
String line = reader.readLine();
while(line!=null){
writer.write(line);
line = reader.readLine();
}
writer.flush();
reader.close();
writer.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

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

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类。

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

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

参考的原文网址:http://lapulande.iteye.com/blog/706051

java文本文件读写的更多相关文章

  1. Java 文本文件 读写

    Use File/FileInputStream/FileOutputStream. public void testWithFIS() throws IOException{ File file=n ...

  2. JAVA核心技术I---JAVA基础知识(文本文件读写)

    一:java IO包概述 (一)Java读写文件,只能以(数据)流的形式进行读写 (二)java IO 包 –节点类:直接对文件进行读写 –包装类 • 转化类:字节/字符/数据类型的转化类 • 装饰类 ...

  3. Java IO读写中文各种乱码问题 【转】

    Java IO读写中文各种乱码问题 转自:http://blog.sina.com.cn/s/blog_484ab56f0101muzh.html java.io.*读写中文各种乱码,很费劲.不完全解 ...

  4. java 顺序 读写 Properties 配置文件

    java 顺序 读写 Properties 配置文件 支持中文 不乱码 java 顺序 读写 Properties 配置文件 ,java默认提供的Properties API 继承hashmap ,不 ...

  5. java StringBuffer读写文件

    java StringBuffer读写文件 StringBuffer的优势 较String:String每更新一次就会new一个新的对象出来,更新次数上去之后,内存开销太大.而StringBuffer ...

  6. java io读写文件

    java io读写文件相关阅读:http://www.cnblogs.com/wing011203/archive/2013/05/03/3056535.html public class DemoI ...

  7. JAVA多线程读写文件范例

    在写之前先声明,本文是基于之前在博客园网站上检索到的一份JAVA多线程读写文件的示例,我在写自己的程序时是在那位作者写的基础上做了改良,但已不记得原文的地址.如果有知情者,烦请帖出地址,我在此文上加入 ...

  8. Qt 学习之路 2(37):文本文件读写

    Qt 学习之路 2(37):文本文件读写 豆子 2013年1月7日 Qt 学习之路 2 23条评论 上一章我们介绍了有关二进制文件的读写.二进制文件比较小巧,却不是人可读的格式.而文本文件是一种人可读 ...

  9. java(IO)读写文件乱码转换UTF-8问题

    java(IO)读写文件乱码转换UTF-8问题 读取文件 String Content = ""; // 文件很长的话建议使用StringBuffer try { FileInpu ...

随机推荐

  1. Django 详解<二> 之url和view

    Django URL(路由系统) RL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表:你就是以这种方式告诉Django,对 ...

  2. iOS应用网络安全之HTTPS

    移动互联网开发中iOS应用的网络安全问题往往被大部分开发者忽略,iOS9和OS X 10.11开始Apple也默认提高了安全配置和要求.本文以iOS平台App开发中对后台数据接口的安全通信进行解析和加 ...

  3. 在unity 中,使用http请求,下载文件到可读可写路径

    在这里我用了一个线程池,线程池参数接收一个带有object参数的,无返回值的委托 ,下载用到的核心代码,网上拷贝的,他的核心就是发起一个web请求,然后得到请求的响应,读取响应的流 剩下的都是常见的I ...

  4. Android修改init.rc和init.xx.rc文件【转】

    本文转载自:https://blog.csdn.net/u013686019/article/details/47981249 一.文件简介 init.rc:Android在启动过程中读取的启动脚本文 ...

  5. 最短路径Dijkstra模板

    算法思想:把所有的边分成两个集合A,B.集合A表示已经求出最短路径的点,不断扩展集合A,减少集合B.每一扩展就从结合B中找出到源点距离最短的点,加入到A. dis[i]数组代表从出发点到j的距离: m ...

  6. 【jsoi】第一季 [略]精简题解

    UPD:好像有两道题的代码逃跑了?= =就先不找了,反正都是水题. 精简题解系列第四弹.(其实也不是那么精简啊= =) [JSOI2008]最大数maxnumber 单点修改,区间最大值查询,裸线段树 ...

  7. Spring boot学习整理

    目录: Springboot结合hbase Springboot结合elasticsearch Springboot结合RestTemplate处理Http请求 Springboot的maven相关 ...

  8. PyCharm 的初始设置1

    PyCharm 的初始设置 PyCharm 的官方网站地址是:https://www.jetbrains.com/pycharm/ 01. 恢复 PyCharm 的初始设置 PyCharm 的 配置信 ...

  9. unity调用C++ dll文件

    首先建立Plugins文件夹,把dll文件放在里面 一一对应,我踩的坑是文件名加了后缀.dll,虽然不知道网上为什么都加了我这加了就报找不到dll文件错误,反正解决啦

  10. JavaScript 获取输入时的光标位置及场景问题

    前言 在输入编辑的业务场景中,可能会需要在光标当前的位置或附近显示提示选项.比如社交评论中的@user功能,要确保提示的用户列表总是出现在@字符右下方,又或者是在自定义编辑器中 autocomplet ...