IO流 p4 FileReader 和 FileWriter
FileReader 和 FileWriter
一、 FileReader 和 File Writer 介绍
FileReader 和 FileWriter 是字符流,即按照字符来操作 io
二、 FileReader 相关方法
- 构造方法摘要
Constructor and Description |
---|
FileReader(File file) 创建一个新的 FileReader ,给出 File 读取。 |
FileReader(String fileName) 创建一个新的 FileReader ,给定要读取的文件的名称。 |
FileReader(FileDescriptor fd) 创建一个新的 FileReader ,给定 FileDescriptor 读取。 |
- 相关方法摘要
Modifier and Type | Method and Description |
---|---|
int |
read() 每次读取单个字符,返回该字符,如过达到文件末尾返回-1 |
int |
read(char[]) 批量读取多个字符到数组中,返回读取到的字符数,如过达到文件末尾返回-1 |
-
相关API:
- new String(char[]):将char[]转换成String
- new String(char[], off, len):将char[]的指定部分转换成String
-
代码演示:
import org.junit.jupiter.api.Test; import java.io.FileReader; import java.io.IOException; /** * @author * @version 1.0 */ public class FileReader_ { public static void main(String[] args) { } /** * 单个字符读取 */ @Test public void fileReader01(){ String filePath = "e:\\story.txt"; //创建FileReader对象 FileReader fileReader = null; int data = 0; try { fileReader = new FileReader(filePath); //循环读取 while((data = fileReader.read()) != -1){ System.out.print((char)data); } } catch (IOException e) { e.printStackTrace(); }finally { try { if(fileReader != null) fileReader.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 字符数组读取 */ @Test public void fileReader02(){ String filePath = "e:\\story.txt"; FileReader fileReader = null; int readLen = 0; char[] buf = new char[8]; try { //创建FileReader对象 fileReader = new FileReader(filePath); //循环读取 while((readLen = fileReader.read(buf)) != -1){ System.out.print((new String(buf, 0, readLen))); } } catch (IOException e) { e.printStackTrace(); }finally { try { if(fileReader != null) fileReader.close(); } catch (IOException e) { e.printStackTrace(); } } } }
三、 FileWriter 相关方法
- 构造方法摘要
Constructor and Description |
---|
FileWriter(File file) 给一个File对象构造一个FileWriter对象。 |
FileWriter(File file, boolean append) 给一个File对象构造一个FileWriter对象。 |
FileWriter(String fileName) 构造一个给定文件名的FileWriter对象。 |
FileWriter(String fileName, boolean append) 构造一个FileWriter对象,给出一个带有布尔值的文件名,表示是否附加写入的数据。 |
FileWriter(FileDescriptor fd) 构造与文件描述符关联的FileWriter对象。 |
- 相关方法摘要
Modifier and Type | Method and Description |
---|---|
void |
writer() 写入单个字符 |
void |
writer(char[]) 写入指定数组 |
void |
writer(char[], int off, int len) 写入指定数组的指定部分 |
void |
writer(String str) 写入整个字符串 |
void |
writer(String str, int off, int len)) 写入字符串的指定部分 |
-
相关API:String类:toCharArray():将String转换成char[]
-
注意:FileWriter使用后,必须要关闭(close)或刷新(flush),否则写入不到指定的文件。在Java中使用带有缓冲的流时进行文件写入时,数据首先被缓存在内存中。当缓冲区满或者close()或flush()方法被调用时,缓冲区中的数据才会被真正地写入到文件中。如果没有关闭流或者flush缓冲区,缓冲区中的数据就会一直保留在内存中,而不会被写入到文件中。如果程序突然崩溃或者关闭,这些缓冲的数据将会丢失,这可能会导致数据的不完整或者文件损坏。
-
代码演示:
import java.io.FileWriter; import java.io.IOException; /** * @author * @version 1.0 */ public class FileWriter_ { public static void main(String[] args) { String filePath = "e:\\note.txt"; FileWriter fileWriter = null; char[] chars = {'a','b','c'}; try { //创建FileWriter对象 fileWriter = new FileWriter(filePath);//默认是覆盖写入 //这种构造方法在使用FileWriter时,如果文件不存在,则会自动创建一个新的文件, // 如果文件已经存在,则会直接打开该文件并清空原有内容,从文件的开头开始写入新的内容。 //1. writer(int):写入单个字符 fileWriter.write('H'); //2. writer(char[]):写入指定数组 fileWriter.write(chars); //3. writer(char[], off, len):写入指定数组的指定部分 fileWriter.write("中国四大名著".toCharArray(), 0, 3); //4. writer(string):写入整个字符串 fileWriter.write("猪八戒娶媳妇"); //5.writer(string, off, len):写入字符串的指定部分 fileWriter.write("三打白骨精",0,2); //在数据量大的情况下可以循环操作 } catch (IOException e) { e.printStackTrace(); }finally { //对应FileWriter,一定要关闭流,或者flush才能真正的把数据写入文件中 //看源码就知道原因 /* 源码: private void writeBytes() throws IOException { this.bb.flip(); int var1 = this.bb.limit(); int var2 = this.bb.position(); assert var2 <= var1; int var3 = var2 <= var1 ? var1 - var2 : 0; if (var3 > 0) { if (this.ch != null) { assert this.ch.write(this.bb) == var3 : var3; } else { this.out.write(this.bb.array(), this.bb.arrayOffset() + var2, var3); } } this.bb.clear(); } */ //在Java中使用FileWriter进行文件写入时,数据首先被缓存在内存中。当缓冲区满或者close()或flush()方法被调用时,缓冲区中的数据才会被真正地写入到文件中。 // //如果没有关闭流或者flush缓冲区,缓冲区中的数据就会一直保留在内存中, // 而不会被写入到文件中。如果程序突然崩溃或者关闭,这些缓冲的数据将会丢失, // 这可能会导致数据的不完整或者文件损坏。 try { fileWriter.close(); //关闭文件流,等价于flush() + 关闭 // fileWriter.flush(); } catch (IOException e) { e.printStackTrace(); } } System.out.println("程序结束"); } }