1.Writer类
Writer写入字符流的抽象类,操作数据的最下单位为1个字符。操作的数据都是字符,定义了写入字符流的基本共性功能方法。
Writer类中常见的方法:
2.FileWriter类
FileWriter类从OutputStreamWriter类继承而来,FileWriter类用于存储文件,用来读取字符文件的便捷类。
- 构造方法
- 写入数据到文件中
【示例】将数据写到文件中
public class FileWriteDemo {
public static void main(String[] args) {
Writer fw = null;
try {
// 创建字符输出流,明确需要操作的文件
fw = new FileWriter("demo.txt");
// 写入字符文件
fw.write("hello world!");
// 强制刷新保存数据
fw.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(fw != null) {
try {
// 关闭流,刷新数据+关闭流
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
- flush()和 close()的区别
flush(): 将流中的缓冲区缓冲的数据刷新到目的地中,刷新后,流还可以继续使用。
close(): 关闭资源,但在关闭前会将缓冲区中的数据先刷新到目的地,否则丢失数据,然后在关闭流。关闭流之后就不能再做write()或flush()操作,否则抛出异常。
- 给文件中续写
发现在 FileWriter 的构造函数中,可以接受一个 boolean类型的值,如果值 true,就会在文件末位继续添加。
【示例】将数据续写到文件中
public class FileWriteDemo01 {
public static void main(String[] args) {
Writer fw = null;
try {
// 创建字符输出流,明确需要操作的文件
fw = new FileWriter("demo.txt", true);
// 写入字符文件
fw.write("hello world!");
// 强制刷新保存数据
fw.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(fw != null) {
try {
// 关闭流,刷新数据+关闭流
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
3.Reader类
Reader用于读取字符流的抽象类,数据单位为字符。操作的数据都是字符,定义了输出字符流的基本共性功能方法。
Reader类中常见的方法:
read(): 读取单个字符并返回,字符的值作为int类型返回(0-65535之间的一个值,Unicode值)。如果未读出字符则返回-1。
read(char[]): 将数据读取到数组中,并返回读取的个数。如果未读出字符则返回-1。
4.FileReader类
FileReader类从InputStreamReader类继承而来,FileReader类用于读取文件,用来读取字符文件的便捷类。
-
构造方法
-
读取数据 read()方法
在读取文件中的数据时,调用 read 方法一次读一个字符,从而实现从文件中读取数据。
【示例】读取数据 read() 方法
public class FileReaderDemo01 {
public static void main(String[] args) {
FileReader fr = null;
try {
// 创建一个读取流对象,一定要明确读取的文件,并且保证文件路径正确
fr = new FileReader("demo.txt");
StringBuffer sb = new StringBuffer();
int len = 0;
// 一次读取一个字符,当返回值为-1,则数据读取完毕
while ((len = fr.read()) != -1) {
sb.append((char) len);
}
System.out.println("string: " + sb);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fr != null) {
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
- 读取数据 read(char[])方法
在读取文件中的数据时,调用 read ()方法,每次只能读取一个字符,太麻烦了,于是我们可以定义数组作为临时的存储容器,这时可以调用重载的 read 方法,一次可以读取多个字符。
【示例】读取数据 read(char[])方法
public class FileReaderDemo {
public static void main(String[] args) {
FileReader fr = null;
try {
// 创建一个读取流对象,一定要明确读取的文件,并且保证文件路径正确
fr = new FileReader("demo.txt");
StringBuffer sb = new StringBuffer();
int len = 0;
char[] buf = new char[1024];
// 一次性读取多个字符,当返回值为-1,则数据读取完毕
while ((len = fr.read(buf)) != -1) {
sb.append(new String(buf, 0, len));
}
System.out.println(sb);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fr != null) {
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
5.字符流文件拷贝案例
原理:读取一个已有的数据,并将这些读到的数据写入到另一个文件中。
【示例】字符流文件的拷贝案例
public class FileWriteReaderDemo {
public static void main(String[] args) throws IOException {
// 创建文件读取流
FileReader fr = new FileReader("E://demo.txt");
// 创建文件写入流
FileWriter fw = new FileWriter("F://demo.txt");
// 读取数据
int len = 0;
char[] buf = new char[1024];
// 读取文件中的数据
while ((len = fr.read(buf)) != -1) {
// 保存读取的数据
fw.write(buf, 0, len);
}
// 关闭流
fr.close();
fw.close();
}
}
ps:如需最新的免费文档资料和教学视频,请添加QQ群(627407545)领取。