一般使用串行方式读出或者写入文件。总的来说,使用输入流把文件内容读入内存,使用输出流把内存中的信息写出到文件。这些类位于java.io包下。
输入和输出的类和方法往往是对应的

文本文件

先了解如何读写文本文件,然后看如何读写二进制文件。jaVa.ioReader用来读取字符,它的子类FileReader用来读取文本文件。
FileReader打开指定路径下的文件。文件的路径分隔符可以用“\\”或者“/”表示。

“\\”是Windows风格的写法,因为字符串中的特殊字符要转义,所以用两个斜线表示一个斜线。

FileReader fr = new FileReader ("c: Wautoexec.bat"); //打幵文本文件

“/”是Linux风格的路径写法,因为不需要转义,所以正斜线只需要写一个就可以了。

FileReader fr = new FileReader ("c:/autoexec.bat"); //打开文本文件

如果有一堆砖要搬,一次取不完,不会一次只拿一块砖,会尽量多拿几块。如果有很多内
容要读,不会一次只读一个字节,而是一次尽量多读一些字节到缓存。

FileReader fr = new FileReader ("c:/autoexec.bat"); //打开文本文件

 BufferedReader br = new BufferedReader (fr); //缓存读
 String line;
  while ((line = br .readLine ()) != null) { //按行读入文件
     System.out.println(line);
  }
  fr.close(); //关闭文本文件

输入流把数据从硬盘读入随机访问存储器(Random Access Memory,简称RAM)。可以
根据输入流构建BufferedReader,实现代码如下所示。

String fileName = "SDIC.txt"; //文件名
InputStream file = new FilelnputStream (new File (fileName)); //打开输入流
//缓存读入数据
BufferedReader in = new BufferedReader(new InputStreamReader(file,"GBK"));

for循环按行读入一个文件

String fileName = "SDIC.txt"; //文件名
InputStream file = new FilelnputStream (new File (fileName));"打开输入流
//缓存读入数据
BufferedReader in = new BufferedReader(new InputStreamReader(file,"GBK"));
String line = in.readLine();
while (line != null) {
System.out.println (line);
line = in.readLine();
}
in.close ();

一般来说,Writer是把内容立即写到硬盘。如果要多次调用write方法,则批量写入效率会
更高。类似于团购,团购的价格往往比单件购买的价格低。可以使用缓存加快文件写入速度。

//使用缺省的缓存大小
BufferedWriter bw - new BufferedWriter(new FileWriter(fileName));
bw.write (”Hello,China!"); //写入一个字符串
bw.write (”\n”); //写入换行符
bw.write("Hello,World!");
bw.close(); //把缓存中的内容写入文件

使用BufferedWriter写入数据时,最后需要调用BufferedWriter的close方法。如果不关闭
文件,可能导致缓存中的数据丢失,写入文件的数据不完整。

按指定编码写入文本的完整代码如下所示。

/*
* 向文件写入字符串
*
* @param content 字符串
*
* @param fileName 文件名
*
* @param encoding 编码
*/
public static void writeToFile(String content, String fileName,
String encoding) {
try {
FileOutputStream fos = new File0utputStream(fileName);
OutputStreamWriter osw = new OutputStreamWriter(fos, encoding);
BufferedWriter bw = new BufferedWriter(osw);
bw.write(content);
bw.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace(); } }

如果黑板上已经有字,可以选择抹去黑板上已有的字重新写,也可以在原来的文字后继续
写。如果一个文件已经存在,可以把新的内容追加写到最后,也可以从头写入新内容,也就是
覆盖写。FileWriter的构造方法区别于这两种写入方式。

//FileWriter 构造方法 .
FileWriter( String fileName, boolean mode) throws IOException

其中的mode = false表示覆盖写,mode = true表示追加写。为了避免冲突,在一个时刻只
能有一个线程写文件。

最新文章

  1. 化茧成蝶,开源NetWorkSocket通讯组件
  2. wow.js使用方法
  3. python3读取chrome浏览器cookies
  4. ListView数据显示混乱
  5. Resume InlineHookSSDT
  6. Java反射_JDBC操作数据
  7. C#磁盘遍历——递归
  8. 全情投入是做好工作的基础——Leo鉴书39
  9. Spring事务配置的五种方式 巨全!不看后悔,一看必懂!
  10. 排序算法用C++的基本算法实现十个数排序
  11. 都能读懂的css3 3D变形效果
  12. javascript 零碎笔记
  13. 博弈论基础知识: 巴什博奕+斐波那契博弈+威佐夫博奕+尼姆博弈(及Staircase)(转)
  14. VS 文件共享
  15. 推荐一款好用并且免费的markdown软件 Typora
  16. XML删除节点
  17. alter system register的用法
  18. RAID基本知识
  19. [您有新的未分配科技点]博弈论入门:被博弈论支配的恐惧(Nim游戏,SG函数)
  20. linux下安装tomcat8

热门文章

  1. iOS移动开发周报-第17期
  2. Android中通过GPS或NetWork获取当前位置的经纬度
  3. 【BZOJ2111】[ZJOI2010]Perm 排列计数 组合数
  4. Java基础知识查漏 一
  5. ChannelHandler揭秘(Netty源码死磕5)
  6. 学习selendroid初衷
  7. Mac查看端口
  8. SPOJ7258
  9. 作业:xml练习2-写.xml的外部约束文件(dtd文件)
  10. smarty模板引擎基础(二)