博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
文件字符输入输出流
阅读量:5133 次
发布时间:2019-06-13

本文共 3737 字,大约阅读时间需要 12 分钟。

一、java.io.Reader

字符输入流,是一个抽象类,是字符输入流的最顶层父类,与字节流不同,字符流可以读写中文

共性的方法:

方法 作用
int read() 读取单个字符并且返回
int read(char[] cbuf) 一次读取多个字符,存储进数组里
void close() 关闭该流,并释放所有与之关联的资源

java.io.FileReader,Reader字符输入流的一个子类

java.io.FileReader extends InputStreamReader extends Reader

文件字符输入流,按照字符而不是按照字节读入

构造方法

构造方法 作用
FileReader(String fileName) fileName文件的路径,创建一个FileReader对象,把该对象指向要读取的文件
FileReader(File file) file文件对象,创建一个FileReader对象,把该对象指向要读取的文件
// 文件读取的过程和字节文件输入流类似package cn.zhuobo.day14.filereader;import java.io.File;import java.io.FileReader;import java.io.IOException;public class Demo01FileReader {    public static void main(String[] args) throws IOException {        File file = new File("/home/zhuobo/Desktop/dir/a.txt");        FileReader fr = new FileReader(file);        /*int len = 0;        while((len = fr.read()) != -1) {            System.out.println((char)len);        }*/        char[] chars = new char[1024];        int len = 0;        while ((len = fr.read(chars)) != -1) {            System.out.println(new String(chars, 0, len));        }        fr.close();    }}

二、java.io.Writer

字符输出流,是一个抽象类,是字符输出流的最顶层父类,与字节流不同,字符流可以读写中文

共性的方法:

方法 作用
void write(int c) 写入单个字符
void write(char[] cbuf) 写入字符数组
abstract void write(char[] cbuf, int off, int len) 写入字符数组的某一部分,索引off开始,len的长度
void write(String str) 写入字符串
void write(String str, int off, int len) 写入字符串的某个部分
void flush() 刷新该流的缓冲
void close() 关闭流,释放资源

java.io.FileWriter, Writer的一个子类

java.io.FileWriter extends OutputStreamWriter extends Writer

文件输出流,按照字符来输出,而不是按照字节

构造方法

构造方法 作用
FileWriter(File file) 根据给定File对象构造一个FileWriter对象,创建一个文件,将FileWriter对象指向文件
FileWriter(String filename) 根据给定文件名(文件路径),构造一个FileWriter对象,创建一个文件,将FileWriter对象指向文件
FileWriter(File file, boolean append) 有续写开关的版本,append == true,不会创建新文件覆盖源文件
FileWriter(String filename, boolean append) 有续写开关的版本,append == true,不会创建新文件覆盖源文件

字符输出流写入文件的步骤:

  • 创建FileWriter对象,构造方法中绑定要写入数据文件的目的地
  • 使用FileWriter对象的write方法,把指定的数据写入到内存缓冲区(有一个字符转换为字节的过程)
  • 使用FileWriter对象的flush方法,把内存缓冲区的数据刷新到文件(这一点与文件字节输出流有所不同)
  • 调用close方法,关闭流,释放资源

flush是刷新缓冲区,流还可以继续使用,可以继续调用write方法继续写入,其实调用close之后,缓冲区也是回刷新到文件,但是流就不能继续使用了。

package cn.zhuobo.day14.aboutfileWriter;import java.io.FileWriter;import java.io.IOException;public class Demo01FileWriter {    public static void main(String[] args) throws IOException {        FileWriter fileWriter = new FileWriter("/home/zhuobo/Desktop/dir/a.txt");        fileWriter.write(78);// 写单个字节        fileWriter.flush();        char[] chars = {'a', 'b', 'c', 'd'};        fileWriter.write(chars);        fileWriter.flush();// 写字符数组        fileWriter.write(chars, 2, 2);// 写一部分的字符数组        fileWriter.write("你好\n");// 写字符串,并且换行        fileWriter.close();    }}

三、使用try catch finally处理流中的意向

try{    可能有异常的代码}catch {    异常的处理逻辑}finall {    close()// close方法放在finally,那么最后一定会关闭流,释放资源}
package cn.zhuobo.day14.aboutfileWriter;import java.io.FileWriter;import java.io.IOException;public class Demo01FileWriter {    public static void main(String[] args) throws IOException {        FileWriter fileWriter = null;        try{            fileWriter = new FileWriter("/hoe/zhuobo/Desktop/dir/a.txt");            fileWriter.write("sdfa");        }catch (IOException e) {            System.out.println(e);        }finally {            if(fileWriter != null) {                fileWriter.close();            }        }    }}

JDK7的特性:但是当使用下面的写法(try后面加括号,里面定义对象,可以定义多个,分号间隔),这样回自动释放流,不用写finally,以及finally块里的close代码

try(FileWriter fw = new FileWriter("path......");object2......){    可能有异常的代码}catch {    异常的处理逻辑}

JDK9的特性:上一中的代码格式中,对象的定义可以在try之外,try的括号里面写定义好的对象即可

FileWriter fw = new FileWriter("path......");FileReader fr = newFileReader("path......");try(fr; fw){    可能有异常的代码}catch {    异常的处理逻辑}

转载于:https://www.cnblogs.com/zhuobo/p/10658910.html

你可能感兴趣的文章
Redis学习
查看>>
Python数据可视化之Pygal(雷达图)
查看>>
Django组件--cookie与session
查看>>
12. javacript高级程序设计-DOM2和DOM3
查看>>
【算法】Quick Select
查看>>
Centos7安装vsftpd (FTP服务器)
查看>>
当前主流读取Excel技术对比
查看>>
js-格式化数字保留两位小数-带千分符
查看>>
【Java】forward & redirect 的差异
查看>>
Java学习笔记--字符串和文件IO
查看>>
【BZOJ1951】古代猪文(CRT,卢卡斯定理)
查看>>
poj 2823 线段树
查看>>
转 Silverlight开发历程—(画刷与着色之线性渐变画刷)
查看>>
SQL语法(3)
查看>>
在js在添版本号
查看>>
C++中map的用法
查看>>
图的遍历
查看>>
信息安全系统设计基础实验三
查看>>
Change log data for DSO
查看>>
maven下载,安装与eclipse中maven配置
查看>>