一般使用串行方式读出或者写入文件。总的来说,使用输入流把文件内容读入内存,使用输出流把内存中的信息写出到文件。这些类位于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表示追加写。为了避免冲突,在一个时刻只
能有一个线程写文件。

java读取文件:文本文件的更多相关文章

  1. [Java]读取文件方法大全(转)

    [Java]读取文件方法大全   1.按字节读取文件内容2.按字符读取文件内容3.按行读取文件内容 4.随机读取文件内容 public class ReadFromFile {     /**     ...

  2. Java 读取文件的内容

    Java 读取文件的内容 1) CLASS_NAME: 换成自己真实的类名 2) /page/test.json: 换成自己真实的page 3) FileUtils: 来自于org.apache.co ...

  3. Java读取文件-BufferedReader/FileReader/InputStreamReader/FileInputStream的关系和区别

    一.Java读取和存储文件数据流 Java读取文件,实际是将文件中的字节流转换成字符流输出到屏幕的过程   这里面涉及到两个类:InputStreamReader和OutputStreamWriter ...

  4. Java 读取文件到字符串

    Java的io操作比较复杂 package cn.outofmemory.util; import java.io.BufferedReader; import java.io.FileInputSt ...

  5. java 读取文件流

    搬运自速学堂:https://www.sxt.cn/Java_jQuery_in_action/ten-iqtechnology.html JAVA中IO流体系: 四大IO抽象类 ·InputStre ...

  6. java读取中文文本文件乱码问题

    今天遇到的问题是这样:用java读取一个中文文本文件,但读取到的却是乱码,之前一直没有问题,查清楚后,原来是因为今天是用的windows的记事本来编辑的文件,因编码方式是的不同而导致了乱码,解决方法就 ...

  7. 使用java读取文件夹中文件的行数

    使用java统计某文件夹下所有文件的行数 经理突然交代一个任务:要求统计某个文件夹下所有文件的行数.在网上查了一个多小时没有解决.后来心里不爽就决定自己写一个java类用来统计文件的行数,于是花了两个 ...

  8. Java读取文件的几种方式

    package com.mesopotamia.test; import java.io.BufferedReader; import java.io.ByteArrayInputStream; im ...

  9. java 读取文件——按照行取出(使用BufferedReader和一次将数据保存到内存两种实现方式)

    1.实现目标 读取文件,将文件中的数据一行行的取出. 2.代码实现 1).方式1: 通过BufferedReader的readLine()方法. /** * 功能:Java读取txt文件的内容 步骤: ...

  10. java读取文件

       一个字节一个字节地读取                  File file =          InputStream inputStream =                       ...

随机推荐

  1. ARM Holdings

    http://en.wikipedia.org/wiki/Advanced_RISC_Machines ARM Holdings  (Redirected from Advanced RISC Mac ...

  2. nodejs websocket 聊天应用

    前端一直是一块充满惊喜的土地,不仅是那些富有创造性的页面,还有那些惊赞的效果及不断推出的新技术.像node.js这样的后端开拓者直接将前端人员的能力扩大到了后端.瞬间就有了一统天下的感觉,来往穿梭于前 ...

  3. JSP 随记

    jstl <c:forEach> 遍历,多个<option>时显示"全部".单个 option时,默认选中! 引入:<%@ taglib prefix ...

  4. 使用C#解决部分Win8.1系统窗体每隔几秒失去焦点的问题

    使用了Win8.1 With Update 1后,发现重新启动系统后,当前激活的窗体总是每隔几秒失去焦点.过0.5~1秒焦点回来.导致输入无法正常工作,严重影响使用心情和效率. 在网上找了非常久,也没 ...

  5. "Installing Software" has encountered a problem---pydev on ubuntu

    "Installing Software" has encountered a problem. An error occurred while collecting items ...

  6. asp.net 列表控件

    web空间类都被放置在System.Web.UI.WebControls命名空间下1.ListBox  ListBox控件用于创建多选的下拉列表,而可选项是通过ListItem元素来定义的.示例代码如 ...

  7. IP address could not be resolved: Name or service not known

    [root@test ~]# /usr/local/mysql/bin/mysqld2018-08-05T07:00:33.647509Z 0 [Warning] [MY-011070] [Serve ...

  8. smod包含具体的增强(具体实施对象) / CMOD 包含一组smod编写的增强

    从标题来看,CMOD 是树木,smod 是树枝. 1.1 SMOD包含具体的增强,而CMOD是包含一组SMOD编写的增强. 1.2 User exits (Function module exits) ...

  9. PySpider安装与使用(Windows系统下)

    PySpider Begin 安装pip install pyspider 在windows系统好像会出现如下问题 Command "python setup.py egg_info&quo ...

  10. [CPP - STL] swap技巧

    最近在看<Effective STL>,[条款17:使用“交换技巧”修整过剩容量]中提到容器的成函数void swap(container& from),即实现容器对象与from对 ...