字符输入流


  • 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. MyEclipse XML & XML架构教程:XML编辑器

    [MyEclipse CI 2019.4.0安装包下载] 1. MyEclipse中的XML编辑 本文档介绍了MyEclipse XML Editor中可用的一些函数.MyEclipse XML编辑器 ...

  2. 2.k8s资源清单

    一.常见资源对象 常见的资源对象:(包括但不仅限于) l  Workload: Pod,ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,Cronjob ...

  3. 对15号夏壹队的TD信息通使用体验

    对夏壹队的APP的用户使用体验:首先下载的时候看到这个APP的大小是6M多点不算很大感觉还不错,但是占内存不大也说明了一个问题,它不会有很多的功能. 图标是一个蜜蜂,打开后会有一个登陆界面,一开始没有 ...

  4. pandas、matplotlib、Numpy模块的简单学习

    目录 一.pandas模块 二.matplotlib模块 1.条形图 2. 直方图 3.折线图 4.散点图+直线图 三.numpy 一.pandas模块 pandas是BSD许可的开源库,为Pytho ...

  5. 通过form提交 django的安全机制

    通过form提交 在form表单里面需要添加{%csrf_token%} 这样当你查看页面源码的时候,可以看到form中有一个input是隐藏的 总结原理:当用户访问login页面的时候,会生成一个c ...

  6. 【SaltStack官方版】—— Events&Reactor系统—EVENT SYSTEM

    Events&Reactor系统 EVENT SYSTEM The Salt Event System is used to fire off events enabling third pa ...

  7. hihocoder 1582 : Territorial Dispute (计算几何)(2017 北京网络赛E)

    题目链接 题意:给出n个点.用两种颜色来给每个点染色.问能否存在一种染色方式,使不同颜色的点不能被划分到一条直线的两侧. 题解:求个凸包(其实只考虑四个点就行.但因为有板子,所以感觉这样写更休闲一些. ...

  8. VS2015编译问题:模块对于 SAFESEH 映像是不安全的

    严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK2026 模块对于 SAFESEH 映像是不安全的. zlibvc C:\MyDirectory\test2\zlib-\contrib\ ...

  9. Wannafly挑战赛16 #E 弹球弹弹弹 splay+基环树+各种思维

    链接:https://ac.nowcoder.com/acm/problem/16033来源:牛客网 有n个位置,标号为1到n的整数,m次操作,第i次操作放置一个弹球在b[i] xor c[i-1]处 ...

  10. Java——基础简介

    [历史] 第三代语言: (1)C.Pascal.Fortran面向过程的语言: (2)C++面向过程/面向对象: (3)Java跨平台的纯面向对象的语言: (4).NET跨语言的平台.   第四代语言 ...