字符输入流


  • 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. springboot中常用注解总结

    1.@RestController(组合注解):标注在类上,等价于@Controller和@Responsebody @Controller:将该类标记为Controller层的类,并且注入到Spri ...

  2. bzoj3091 城市旅行 LCT + 区间合并

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=3091 题解 调了整个晚自习才调出来的问题. 乍一看是个 LCT 板子题. 再看一眼还是个 LC ...

  3. Django【第28篇】:Django Admin的相关知识

    Django Admin的相关知识 一.面向对象复习 1.类的继承 class Base(object): def __init__(self,val): self.val = val def fun ...

  4. 《扩展和嵌入python解释器》1.4 模块方法表和初始化函数

    <扩展和嵌入python解释器>1.4 模块方法表和初始化函数   1.4 模块方法表和初始化函数 下面,我演示如何从Python程序调用spam_system().首先,我们需要在’方法 ...

  5. day3 ord,chr,random,string

    day3复习 >>> for i in range(10): ... if i == 3: ... break ... print(i) ... 0 1 2 >>> ...

  6. LeetCode--078--子集(python)

    给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: nums = [1,2,3]输出:[ [3],  [1],  [2],  ...

  7. Task5.PyTorch实现L1,L2正则化以及Dropout

    1.了解知道Dropout原理 深度学习网路中,参数多,可能出现过拟合及费时问题.为了解决这一问题,通过实验,在2012年,Hinton在其论文<Improving neural network ...

  8. Oracle RAC数据泵导出问题处理

    1. 设置导出文件路径 sqlplus / as sysdba SQL> alter session set container=spdb1pdb; SQL> create directo ...

  9. A1011

    找最大的,然后按规定计算后输出. 没啥可说的,除非犯了愚蠢的错误(比如把j写成i这种),按题目要求写就是了. #include<cstdio> int main(){ ]={'W','T' ...

  10. HTML中的表单<form>标签

    一.HTML表单 HTML 表单用于搜集不同类型的用户输入. HTML 表单包含表单元素,表单元素指的是不同类型的 input 元素.复选框.单选按钮.提交按钮等等. 关于表单的更多内容可以参考htt ...