IO流 -字符输入输出流,以及异常处理方法
字符输入流
java.io.Reader: 字符输入流的顶层抽象父类
共性的成员方法:
- int read()
读取单个字符,并返回。 - int read(char[] cbuf)
将字符读入数组。 - abstract int read(char[] cbuf, int off, int len)
将字符读入数组的某一部分。 - abstract void close()
关闭该流并释放与之关联的所有资源。
- int read()
FileReader:字符文件输入流
java.lang.Object
继承者 java.io.Reader
继承者 java.io.InputStreamReader
继承者 java.io.FileReader作用:把文件以字符的方式读取到内存中
构造方法:
- FileReader(String fileName)
在给定从中读取数据的文件名的情况下创建一个新 FileReader。 - FileReader(File file)
在给定从中读取数据的 File 的情况下创建一个新 FileReader。 - 构造方法作用:创建一个FileReader对象,根据构造方法中传递的文件/文件路径,创建文件,会把FileReader对象指向读取的文件
- FileReader(String fileName)
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
public class IOApi {
public static void main(String[] args) throws IOException {
//1.创建FileReader对象,构造方法中绑定要读取的数据源
FileReader reader= new FileReader("b.txt");
/* //2.使用FileReader对象中的方法read读取文件
//int len 接受返回的字符整型值
int len = 0;
while ((len=reader.read()) != -1)
System.out.print((char) len);*/
//优化,数组读取多个字符,len1表示读取的有效字符个数
char[] chars= new char[2];
int len1 = 0;
//reader.read(chars)会把读取的两个字符放入chars中,并返回读取的有效位数
while((len1 = reader.read(chars)) != -1)
//再优化,读取有效位,防止多读
System.out.print(new String(chars,0,len1));
//3.释放资源
reader.close();
}
}
字符输出流
java.io.Writer: 字符输出流,是所有字符输出的顶层抽象父类
共性的方法:
- Writer append(char c)
将指定字符添加到此 writer。 - Writer append(CharSequence csq)
将指定字符序列添加到此 writer。 - Writer append(CharSequence csq, int start, int end)
将指定字符序列的子序列添加到此 writer.Appendable。 - bstract void close()
关闭此流,但要先刷新它。 - bstract void flush()
刷新该流的缓冲。 - void write(char[] cbuf)
写入字符数组。 - abstract void write(char[] cbuf, int off, int len)
写入字符数组的某一部分。 - void write(int c)
写入单个字符。 - void write(String str)
写入字符串。 - void write(String str, int off, int len)
写入字符串的某一部分。
- Writer append(char c)
FileWriter -字符文件输出流
java.lang.Object
继承者 java.io.Writer
继承者 java.io.OutputStreamWriter
继承者 java.io.FileWriter作用:把内存的字符写入文件中
构造方法:
- FileWriter(String fileName)
根据给定的文件名构造一个 FileWriter 对象。 - FileWriter(File file)
根据给定的文件对象构造一个 FileWriter 对象。String fileName:文件路径 File file:一个文件
- 构造方法作用:创建一个FileWriter对象,根据构造方法中传递的文件/文件路径,创建文件,并将FileWriter对象指向该文件
- FileWriter(String fileName)
字符输出流使用步骤
- 创建FileWriter对象,构造方法中绑定要写入数据的目的地
- 使用FileWriter中的write方法,把数据写入内存缓冲区中(字符转换为字节的过程)
- 使用FileWriter中的flush方法,将内存缓存区的数据刷新到文件中
- 释放资源(会做第三步的行为,第三步可以省略)
import java.io.FileWriter;
import java.io.IOException;
public class IOApi {
public static void main(String[] args) throws IOException {
FileWriter writer = new FileWriter("d.txt");
//void write(int c) 写单个字符
//与写入字节流相比,自动创建了文件并写入了内存缓冲区,但并未写入文件
writer.write(97);
//刷新至文件,写入文件
writer.flush(); //a
//释放资源,可以省略刷新步骤
writer.close();
}
}
字符输出类的关闭与刷新的区别
- flush: 刷新缓冲区,流可以继续使用
- close: 先刷新到缓冲区,再关闭流,流不能继续使用
FileWriter字符输出流的其他方法:
import java.io.FileWriter;
import java.io.IOException;
public class IOApi {
public static void main(String[] args) throws IOException {
FileWriter writer = new FileWriter("f.txt");
//void write(char[] cbuf)写入字符数组
char[] chars=new char[]{'a','b','c'};
writer.write(chars);
writer.flush();
//void write(char[] cbuf,int off,int len)写字符数组的一部分
writer.write(chars,1,2);
writer.flush();
//void write(String str)//直接写入字符串
writer.write("李大爷");
writer.close();
}
}
- 如续写,FileWriter writer = new FileWriter("f.txt",true);
处理流的异常
使用try catch
- 格式:
try{
可能出现异常的代码
}catch(异常变量 异常变量名){
异常处理逻辑
}finally{
一定会指定的代码
资源释放
}
- 格式:
JDK1.7之前特别麻烦,代码如下
import java.io.FileWriter;
import java.io.IOException;
public class IOApi {
public static void main(String[] args) {
//因为使用try catch,finally的变量,用不了,拿到碗面
FileWriter writer = null;
//void write(char[] cbuf)写入字符数组
char[] chars = new char[]{'a', 'b', 'c'};
try {
writer = new FileWriter("f.txt");
writer.write(chars);
writer.flush();
} catch (IOException e) {
System.out.println("没有该文件,我自动生成");
} finally {
//一定要执行的代码
/*
如果writer对象创建文件失败,writer.close();抛出异常
因为失败的话,null是不能调用close的,所以可以进行if判断
*/
//close方法声明抛出了异常,处理它
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
JDK9新特性 - 还是需要throws
- try前边可以定义 流对象
- try后边的()可以直接引入流对象的名称(变量名)
- try代码执行完毕之后,流对象也可以释放掉,不用写finally
import java.io.FileWriter;
import java.io.IOException;
public class IOApi {
public static void main(String[] args) throws IOException {
//void write(char[] cbuf)写入字符数组
char[] chars=new char[]{'a','b','c'};
FileWriter writer = new FileWriter("f.txt");
FileWriter writer01 = new FileWriter("b.txt");
//自动关闭流
try(writer01;writer) {
writer.write("李大爷");
writer.write(chars);
writer.flush();
} catch (IOException e) {
System.out.println("没有该文件,我自动生成");
}
}
}
IO流 -字符输入输出流,以及异常处理方法的更多相关文章
- IO流-字节输出流OutputStream异常处理
package it.cast_01; import java.io.FileNotFoundException; import java.io.FileOutputStream; import ja ...
- Java中的IO流之输出流|乐字节
大家好,乐字节小乐又来了.上一篇给大家带来的是:Java中的IO流之输入流|乐字节,本文将继续讲述IO流之输出流. 一.输出流 1.抽象类:OutputStream 和 Writer Output ...
- Java精选笔记_IO流(字符输入输出流、字符文件输入输出流、字符流的缓冲区)
字符流 Reader是字符输入流的基类,用于从某个源设备读取字符 Writer是字符输出流,用于向某个目标设备写入字符 字符流操作文件 字符输入流FileReader,通过此流可以从关联的文件中读取一 ...
- 021.2 IO流——字节输出流
内容:流的分类,文件写入(字节输出流),异常处理,获取一个文件夹下的特定文件集合 字节流的抽象基类:InputStream,OutputStream字符流的抽象基类:Reader,Writer由这四个 ...
- IO流输入 输出流 字符字节流
一.流 1.流的概念 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. ...
- 10 IO流(七)——copy方法封装、关闭流方法封装的两种方式以及try...with...resource
前言 本文将上一节做的代码,对copy方法与关闭流方法进行封装,并使用try...with...resource关闭流. copy方法封装 我们将copy方法封装,使得只需传入两个流,就能将输入流的源 ...
- Java IO流-标准输入输出流
2017-11-05 19:13:21 标准输入输出流:System类中的两个成员变量. 标准输入流(public static final InputStream in):“标准”输入流.此流已打开 ...
- IO流输入输出流,字符字节流
一.流 1.流的概念 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. ...
- 04 IO流(二)——IO类的记忆方法、使用场景
关于IO流以前写的PPT式笔记请跳转:https://blog.csdn.net/SCORPICAT/article/details/87975094#262___1451 IO流的主要结构 记忆方法 ...
随机推荐
- MyEclipse XML & XML架构教程:XML编辑器
[MyEclipse CI 2019.4.0安装包下载] 1. MyEclipse中的XML编辑 本文档介绍了MyEclipse XML Editor中可用的一些函数.MyEclipse XML编辑器 ...
- 2.k8s资源清单
一.常见资源对象 常见的资源对象:(包括但不仅限于) l Workload: Pod,ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,Cronjob ...
- 对15号夏壹队的TD信息通使用体验
对夏壹队的APP的用户使用体验:首先下载的时候看到这个APP的大小是6M多点不算很大感觉还不错,但是占内存不大也说明了一个问题,它不会有很多的功能. 图标是一个蜜蜂,打开后会有一个登陆界面,一开始没有 ...
- pandas、matplotlib、Numpy模块的简单学习
目录 一.pandas模块 二.matplotlib模块 1.条形图 2. 直方图 3.折线图 4.散点图+直线图 三.numpy 一.pandas模块 pandas是BSD许可的开源库,为Pytho ...
- 通过form提交 django的安全机制
通过form提交 在form表单里面需要添加{%csrf_token%} 这样当你查看页面源码的时候,可以看到form中有一个input是隐藏的 总结原理:当用户访问login页面的时候,会生成一个c ...
- 【SaltStack官方版】—— Events&Reactor系统—EVENT SYSTEM
Events&Reactor系统 EVENT SYSTEM The Salt Event System is used to fire off events enabling third pa ...
- hihocoder 1582 : Territorial Dispute (计算几何)(2017 北京网络赛E)
题目链接 题意:给出n个点.用两种颜色来给每个点染色.问能否存在一种染色方式,使不同颜色的点不能被划分到一条直线的两侧. 题解:求个凸包(其实只考虑四个点就行.但因为有板子,所以感觉这样写更休闲一些. ...
- VS2015编译问题:模块对于 SAFESEH 映像是不安全的
严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK2026 模块对于 SAFESEH 映像是不安全的. zlibvc C:\MyDirectory\test2\zlib-\contrib\ ...
- Wannafly挑战赛16 #E 弹球弹弹弹 splay+基环树+各种思维
链接:https://ac.nowcoder.com/acm/problem/16033来源:牛客网 有n个位置,标号为1到n的整数,m次操作,第i次操作放置一个弹球在b[i] xor c[i-1]处 ...
- Java——基础简介
[历史] 第三代语言: (1)C.Pascal.Fortran面向过程的语言: (2)C++面向过程/面向对象: (3)Java跨平台的纯面向对象的语言: (4).NET跨语言的平台. 第四代语言 ...