字符输入流


  • 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. [ZJOI2006]物流运输(动态规划,最短路)

    [ZJOI2006]物流运输 题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个 ...

  2. Spring Boot 整合Spring Data JPA

    Spring Boot整合Spring Data JPA 1)加入依赖 <dependency> <groupId>org.springframework.boot</g ...

  3. 对redis高并发测试的研究

    以下引用大神的: 测试项目: https://github.com/14251104246/redis-demo.git 准备 使用docker-compose命令启动redis服务器(可以用其他方式 ...

  4. python+selenium实现发送一封带附件的邮件

    163邮件登录首页 登录成功断言是否有退出按钮 点击退出退出登录 from selenium import webdriver import unittest import time class Vi ...

  5. 2019年开发App记录

    Pod 制作私有库参考 https://www.jianshu.com/p/f903ecf8e882 Pod私有库的升级 改代码部分,到Example文件夹执行pod install ,修改XXX.s ...

  6. B/S实现大视频上传

    在公司做B/S 开发与维护三年啦, 对B/S架构的了解也是只知大概,对于这种基础知识还是很有必要理一理哒.趁空去网上查阅了资料,顺便整理一份笔记供以后查询. 一. B/S的概念 B/S(Brower/ ...

  7. Java——容器(Comparable)

    [Comparable]  

  8. luogu P1125 笨小猴 x

    P1125 笨小猴 题目描述 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼.但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法的具体描述如下:假设max ...

  9. HDU 1314 Numerically Speaking(大数加减乘除+另类二十六进制互相转换)

    原题代号:HDU 1314 原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1314 Numerically Speaking Time Limit: 2 ...

  10. Ubuntu 14.04 DNS 丢失 | 中文输入法配置 (转载)

    1)彻底解决Ubuntu 14.04 重启后DNS配置丢失的问题: http://www.tuicool.com/articles/RVZn2y 2)Ubuntu 14.04中文输入法的安装   ht ...