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 = ;
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的时候结束,中间可以有多个单纯的换行而不结束。
有读就有写。写文本可以使用PrintWriter、FileWriter和BufferWriter三种方法。
代码如下
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文本文件读写的更多相关文章
- Java 文本文件 读写
Use File/FileInputStream/FileOutputStream. public void testWithFIS() throws IOException{ File file=n ...
- JAVA核心技术I---JAVA基础知识(文本文件读写)
一:java IO包概述 (一)Java读写文件,只能以(数据)流的形式进行读写 (二)java IO 包 –节点类:直接对文件进行读写 –包装类 • 转化类:字节/字符/数据类型的转化类 • 装饰类 ...
- Java IO读写中文各种乱码问题 【转】
Java IO读写中文各种乱码问题 转自:http://blog.sina.com.cn/s/blog_484ab56f0101muzh.html java.io.*读写中文各种乱码,很费劲.不完全解 ...
- java 顺序 读写 Properties 配置文件
java 顺序 读写 Properties 配置文件 支持中文 不乱码 java 顺序 读写 Properties 配置文件 ,java默认提供的Properties API 继承hashmap ,不 ...
- java StringBuffer读写文件
java StringBuffer读写文件 StringBuffer的优势 较String:String每更新一次就会new一个新的对象出来,更新次数上去之后,内存开销太大.而StringBuffer ...
- java io读写文件
java io读写文件相关阅读:http://www.cnblogs.com/wing011203/archive/2013/05/03/3056535.html public class DemoI ...
- JAVA多线程读写文件范例
在写之前先声明,本文是基于之前在博客园网站上检索到的一份JAVA多线程读写文件的示例,我在写自己的程序时是在那位作者写的基础上做了改良,但已不记得原文的地址.如果有知情者,烦请帖出地址,我在此文上加入 ...
- Qt 学习之路 2(37):文本文件读写
Qt 学习之路 2(37):文本文件读写 豆子 2013年1月7日 Qt 学习之路 2 23条评论 上一章我们介绍了有关二进制文件的读写.二进制文件比较小巧,却不是人可读的格式.而文本文件是一种人可读 ...
- java(IO)读写文件乱码转换UTF-8问题
java(IO)读写文件乱码转换UTF-8问题 读取文件 String Content = ""; // 文件很长的话建议使用StringBuffer try { FileInpu ...
随机推荐
- Linux 基础一---操作系统&常用命令
UNIX是一个计算机操作系统,一个用来协调.管理和控制计算机硬件和软件资源的控制程序. 1.UNIX操作系统的特点:多用户和多任务: a) 多用户表示在同一时刻可以有多个用户同时使用UNIX操作系统而 ...
- Python mysql表数据和json格式的相互转换
功能: 1.Python 脚本将mysql表数据转换成json格式 2.Python 脚本将json数据转成SQL插入数据库 表数据: SQL查询:SELECT id,NAME,LOCAL,mobil ...
- 20145239杜文超《网络攻防》- MSF基础应用
20145239杜文超<网络攻防>- MSF基础应用 基础问题回答 1.用自己的话解释什么是exploit,payload,encode? exploit:实现攻击行为的主体,但没有载荷只 ...
- 20145230《Java程序设计》第3周学习总结
20145230 <Java程序设计> 第3周学习总结 教材学习内容总结 String s=new String();第四章我首先了解了CPU与内存的关系,栈与堆的关系.要产生对象必须先定 ...
- 全志H3-NanoPi开发板SDK之三编译流程【转】
本文转载自:https://blog.csdn.net/yuesichiu/article/details/77600124 版权声明:本文为博主(宽简厚重,Yuesichiu)原创文章,未经博主允许 ...
- ubuntu中如何添加IP
编辑网卡配置文件vi /etc/network/interfaces 在配置文件下增加新的IP配置 之后重启网络/etc/init.d/networking restart
- jupyter && ipython notebook简介
2017-08-19 最近用了一下 ipython notebook 也就是 jupyter,这里有一个介绍还不错: http://www.cnblogs.com/howiewang/p/jupyte ...
- 【P1274】魔术数字游戏(搜索+剪枝+模拟)
做完了这个题的我一口老血喷在屏幕上... 这个题难度不高(~~胡扯~~),就是爆搜就可以了,然而..判断条件灰常多,剪枝也就非常多..然而,这些判断条件又不得不必须满足,所以也就十分容易错... 说一 ...
- 虚拟机CentOS6.5网络配置
不得不说 6.5比7.0麻烦了许多.. 编辑ifcfg配置文件 vi /etc/sysconfig/network-script/ifcfg-eth0 内容如下 DEVICE=eth0 HWADDR ...
- Python之Django总结
一.Django 总结django知识点 一.视图函数: 请求对象-----------request: 1.HttpRequest.body: 请求原 ...