字符输入流


  • java.io.Reader: 字符输入流的顶层抽象父类

  • 共性的成员方法:

    1. int read()

      读取单个字符,并返回。
    2. int read(char[] cbuf)

      将字符读入数组。
    3. abstract int read(char[] cbuf, int off, int len)

      将字符读入数组的某一部分。
    4. abstract void close()

      关闭该流并释放与之关联的所有资源。

FileReader:字符文件输入流


  • java.lang.Object

    继承者 java.io.Reader

    继承者 java.io.InputStreamReader

    继承者 java.io.FileReader

  • 作用:把文件以字符的方式读取到内存中

  • 构造方法:

    1. FileReader(String fileName)

      在给定从中读取数据的文件名的情况下创建一个新 FileReader。
    2. FileReader(File file)

      在给定从中读取数据的 File 的情况下创建一个新 FileReader。
    3. 构造方法作用:创建一个FileReader对象,根据构造方法中传递的文件/文件路径,创建文件,会把FileReader对象指向读取的文件
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: 字符输出流,是所有字符输出的顶层抽象父类

  • 共性的方法:

    1. Writer append(char c)

      将指定字符添加到此 writer。
    2. Writer append(CharSequence csq)

      将指定字符序列添加到此 writer。
    3. Writer append(CharSequence csq, int start, int end)

      将指定字符序列的子序列添加到此 writer.Appendable。
    4. bstract void close()

      关闭此流,但要先刷新它。
    5. bstract void flush()

      刷新该流的缓冲。
    6. void write(char[] cbuf)

      写入字符数组。
    7. abstract void write(char[] cbuf, int off, int len)

      写入字符数组的某一部分。
    8. void write(int c)

      写入单个字符。
    9. void write(String str)

      写入字符串。
    10. void write(String str, int off, int len)

      写入字符串的某一部分。

FileWriter -字符文件输出流


  • java.lang.Object

    继承者 java.io.Writer

    继承者 java.io.OutputStreamWriter

    继承者 java.io.FileWriter

  • 作用:把内存的字符写入文件中

  • 构造方法:

    1. FileWriter(String fileName)

      根据给定的文件名构造一个 FileWriter 对象。
    2. FileWriter(File file)

      根据给定的文件对象构造一个 FileWriter 对象。

      String fileName:文件路径 File file:一个文件

    3. 构造方法作用:创建一个FileWriter对象,根据构造方法中传递的文件/文件路径,创建文件,并将FileWriter对象指向该文件
  • 字符输出流使用步骤

    1. 创建FileWriter对象,构造方法中绑定要写入数据的目的地
    2. 使用FileWriter中的write方法,把数据写入内存缓冲区中(字符转换为字节的过程)
    3. 使用FileWriter中的flush方法,将内存缓存区的数据刷新到文件中
    4. 释放资源(会做第三步的行为,第三步可以省略)
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(); }
}
  • 字符输出类的关闭与刷新的区别

    1. flush: 刷新缓冲区,流可以继续使用
    2. 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

    1. 格式:

      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

    1. try前边可以定义 流对象
    2. try后边的()可以直接引入流对象的名称(变量名)
    3. 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流 -字符输入输出流,以及异常处理方法的更多相关文章

  1. IO流-字节输出流OutputStream异常处理

    package it.cast_01; import java.io.FileNotFoundException; import java.io.FileOutputStream; import ja ...

  2. Java中的IO流之输出流|乐字节

    大家好,乐字节小乐又来了.上一篇给大家带来的是:Java中的IO流之输入流|乐字节,本文将继续讲述IO流之输出流.   一.输出流 1.抽象类:OutputStream 和 Writer Output ...

  3. Java精选笔记_IO流(字符输入输出流、字符文件输入输出流、字符流的缓冲区)

    字符流 Reader是字符输入流的基类,用于从某个源设备读取字符 Writer是字符输出流,用于向某个目标设备写入字符 字符流操作文件 字符输入流FileReader,通过此流可以从关联的文件中读取一 ...

  4. 021.2 IO流——字节输出流

    内容:流的分类,文件写入(字节输出流),异常处理,获取一个文件夹下的特定文件集合 字节流的抽象基类:InputStream,OutputStream字符流的抽象基类:Reader,Writer由这四个 ...

  5. IO流输入 输出流 字符字节流

    一.流 1.流的概念 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. ...

  6. 10 IO流(七)——copy方法封装、关闭流方法封装的两种方式以及try...with...resource

    前言 本文将上一节做的代码,对copy方法与关闭流方法进行封装,并使用try...with...resource关闭流. copy方法封装 我们将copy方法封装,使得只需传入两个流,就能将输入流的源 ...

  7. Java IO流-标准输入输出流

    2017-11-05 19:13:21 标准输入输出流:System类中的两个成员变量. 标准输入流(public static final InputStream in):“标准”输入流.此流已打开 ...

  8. IO流输入输出流,字符字节流

    一.流 1.流的概念 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. ...

  9. 04 IO流(二)——IO类的记忆方法、使用场景

    关于IO流以前写的PPT式笔记请跳转:https://blog.csdn.net/SCORPICAT/article/details/87975094#262___1451 IO流的主要结构 记忆方法 ...

随机推荐

  1. Python chardet字符编码的判断

    使用 chardet 可以很方便的实现字符串/文件的编码检测.尤其是中文网页,有的页面使用GBK/GB2312,有的使用UTF8,如果你需要去爬一些页面,知道网页编码很重要的,虽然HTML页面有cha ...

  2. Comet OJ - Contest #2 B 她的想法、他的战斗(概率 + 数学)

    题目描述 Takuru 是一名情报强者,所以他想利用他强大的情报搜集能力来当中间商赚差价. Takuru 的计划是让 Hinae 帮他去市场上买一个商品,然后再以另一个价格卖掉它.Takuru 会给 ...

  3. 算法竞赛进阶指南 0x00 基本算法

    放在原来这个地方不太方便,影响阅读体验.为了读者能更好的刷题,另起一篇随笔. 0x00 基本算法 0x01 位运算 [题目][64位整数乘法] 知识点:快速幂思想的灵活运用 [题目][最短Hamilt ...

  4. 扩展微信小程序 Page 构造函数,修改生命周期函数

    不BB,直接正题 一. 将公共方法绑定到Page上 单个绑定 const oldPage = Page Page = function(app) { // 注意公共函数的名字不要重复,否则覆盖 app ...

  5. DevExpress v18.2版本亮点——Office File API 篇

    行业领先的.NET界面控件——DevExpress v18.2版本亮点详解,本文将介绍了DevExpress Office File API v18.2 的版本亮点,新版30天免费试用!点击下载> ...

  6. Git版本控制工具初识

    Git使用教程 0 Git下载安装 下载网址:https://www.git-scm.com/download/ 安装时,一路next就可以了,如果遇到下载很慢时,可以选择换个浏览器试试,实在不行就找 ...

  7. Python---进阶---函数式编程---lambda

    一. 利用map()函数,把用户输入的不规范的英文,变成首字母大写,其他小写的规范的名字:比如说["ADMAm", "LISA", "JACK&quo ...

  8. linux运维、架构之路-tomcat服务

    一.tomcat介绍       Tomcat服务器是一个免费的开放源代码的Web应用服务器,即能处理静态页面,又能处理动态的java页面 二.JDK安装 jdk是java开发工具包,也可以叫java ...

  9. UOJ #228. 基础数据结构练习题 线段树 + 均摊分析 + 神题

    题目链接 一个数被开方 #include<bits/stdc++.h> #define setIO(s) freopen(s".in","r",st ...

  10. 算法题常见的BUG错误(总结)

    1. 快排的partition if(l >= r) return ; int i = l, j = r; int tmp = v[i]; while(i < j) { while(i & ...