Java重修笔记 第六十天 坦克大战(十)IO 流 - FileReader 和 FileWriter
-
字符流
FileReader 和 FileWriter 是文件字符流,是 FileInputStream 和 FileOutputStream 的子类,文件字符流可以读取汉字等多个字节的字符。
-
FileReader 类相关方法
1. 通过文件路径来创建字符输入流
public FileReader(String fileName) throws FileNotFoundException
参数:fileName - 要读取的文件的名
异常:FileNotFoundException - 如果命名文件不存在,是一个目录,而不是常规文件,或者由于某些其他原因无法打开读取
2. 通过 File 类来创建字符输入流
public FileReader(File file) throws FileNotFoundException
参数:file - 目标 File 对象
异常:FileNotFoundException - 如果命名文件不存在,是一个目录,而不是常规文件,或者由于某些其他原因无法打开读取
3. 读取一个字符
public int read() throws IOException
返回值:返回一个 0 到 65535( 0x00 - 0xffff )范围内的整数,如果已经达到流的末尾,则返回-1
异常:IOException - 如果发生I / O错误
4. 批量读取字符
public int read(char[] cbuf) throws IOException
返回值:返回读取到的字符数
参数:cbuf - 将读取到的字符存储在该字符数组中
异常:IOException - 如果发生I / O错误
5. 关闭流
public void close() throws IOException
异常:IOException - 如果发生I / O错误
说明:关闭流并释放与之相关联的任何系统资源。 一旦流已关闭,进一步的read(),ready(),mark(),reset()或skip()调用将抛出IOException。 关闭以前关闭的流无效。
public class FileReader01 {
public static void main(String[] args) {
}
@Test
public void m1() {
// 使用字符输入流,以单个字符的形式读取文件内容
FileReader fileReader = null;
int read = 0;
try {
fileReader = new FileReader("d:\\a.txt");
while ((read = fileReader.read()) != -1) {
System.out.print((char) read);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fileReader != null) {
fileReader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Test
public void m2() {
// 使用字符数组的方式读取文件内容
FileReader fileReader = null;
char[] chars = new char[8];
int read = 0;
try {
fileReader = new FileReader("d:\\a.txt");
while ((read = fileReader.read(chars)) != -1) {
System.out.print(new String(chars,0,read));
// for (int i = 0; i < chars.length; i++) {
// if (i >= read) break;
// System.out.print(chars[i]);
// }
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fileReader != null) {
fileReader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
-
FileWriter 类相关方法
1. 通过文件名来创建字符输出流
public FileWriter(String fileName, boolean append) throws IOException
参数:fileName - 系统相关的文件名
append - 如果是 true ,那么将以追加模式写入数据,不写默认 false 覆盖
异常:IOException - 如果发生I / O错误
说明:FileWriter 使用后,必须 close 关闭或者 flush 刷新,否则写入不到指定文件
2. 通过 File 类来创建字符输出流
public FileWriter(File file, boolean append) throws IOException
参数:file - 目标 File 对象
append - 如果是 true ,那么将以追加模式写入数据,不写默认 false 覆盖
异常:IOException - 如果发生I / O错误
说明:FileWriter 使用后,必须 close 关闭或者 flush 刷新,否则写入不到指定文件
3. 写入一个字符
public void write(int c) throws IOException
参数:c - int指定要写入的字符
异常:IOException - 如果发生I / O错误
说明:FileWriter 使用后,必须 close 关闭或者 flush 刷新,否则写入不到指定文件
4. 写入一个字符数组
public void write(char[] cbuf) throws IOException
参数:cbuf - 要写入的字符数组
异常:IOException - 如果发生I / O错误
说明:FileWriter 使用后,必须 close 关闭或者 flush 刷新,否则写入不到指定文件
5. 写入字符数组中的一部分
public abstract void write(char[] cbuf, int off, int len) throws IOException
参数:cbuf - 目标数组
off - 从那个索引下开始写入
len - 写入的长度
异常:IOException - 如果发生I / O错误
说明:FileWriter 使用后,必须 close 关闭或者 flush 刷新,否则写入不到指定文件
6. 写入一个字符串
public void write(String str) throws IOException
参数:str - 要写入的字符串
异常:IOException - 如果发生I / O错误
说明:FileWriter 使用后,必须 close 关闭或者 flush 刷新,否则写入不到指定文件
7. 刷新流
public abstract void flush() throws IOException
异常:IOException - 如果发生I / O错误
说明:FileWriter 使用后,必须 close 关闭或者 flush 刷新,否则写入不到指定文件
8. 关闭流
public abstract void close() throws IOException
异常:IOException - 如果发生I / O错误
说明:关闭流之前先刷新。 一旦流已关闭,进一步的 write()或 flush()调用将导致抛出IOException。 关闭以前关闭的流无效。
@Test
public void m1() {
FileWriter fileWriter = null;
char[] chars = {'a', 'b', 'c'};
try {
fileWriter = new FileWriter("d:\\b.txt", true);
fileWriter.write('c');
fileWriter.write("测试! 测试!", 0, 3);
fileWriter.write(chars, 0, 2);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fileWriter != null) {
try {
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
原文地址:https://blog.csdn.net/Code___slave/article/details/142572283
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!