Java IO框架-导学

JDK中封装的操作IO流的一系列工具类,位于java.io包。

一、What

1、IO是什么?Java IO又是什么?

IO,Input/Output,输入/输出。计算机系统中,主要分为IO设备和IO接口。IO设备中,如从键盘输入、通过显示器输出。IO接口中,指的是操作系统与外部设备的接口,外部设备向操作系统输入,操作系统处理后向外部设备输出。
java程序中的IO,指的是对jvm内存的输入,jvm向外的输出。比如java程序读写文件,读是从硬盘向jvm内存输入,写是从jvm内存向硬盘输出。

2、Java IO框架指的是什么?

Java IO框架是JDK中封装的操作IO流的一系列工具类。

二、Why

1、掌握了Java IO框架有什么用处?

掌握Java IO流,当遇到需要处理文件读写等数据传输场景,能轻松写出性能优良的代码。

三、How

如何学习掌握”Java IO框架“,可以通过以下步骤循序渐进:

  1. 了解流的概念和分类
  2. 熟练使用IO框架中的常用类
  3. 熟悉jdk8中IO框架的相关源码

1、了解流的概念和分类

1.1 流的概念

计算机中的流,就像现实世界中的水流、电流,水流中流动的主要是水分子,电流中流动的是电子,计算机流中流动的是一个个数据字节。

1.2 Java中流的分类
  • 按数据流的方向:
    • 输入流
    • 输出流
  • 按处理数据的单位:
    • 字节流
    • 字符流
  • 按功能:
    • 节点流(底层流/低级流,直接操作数据源的流。)
    • 处理流(包装流,在节点流的基础上进行包装,对功能进行增强。)

2、掌握IO框架的常用场景

2.1 场景使用的原则
  • 当操作的是纯文本文件时,优先使用字符流。
  • 当操作的是音视频等二进制文件时,优先使用字节流。
  • 当不确定操作文件的类型时,优先使用字节流。
2.2 常用的字节流
2.2.1 FileOutputStream

输出流,程序写文件时使用。

使用步骤如下:

1、创建输出流对象

// 向指定名称的文件写入数据。
FileOutputStream fos = new FileOutputStream("abc.txt");
// 实例化对象过程中,做了三件事
// 1.创建指定名称的文件
// 2.创建字节输出流对象
// 3.让输出流指向文件

FileOutputStream类的5种实例化入参方式:

new FileOutputStream(String name);
new FileOutputStream(String name, boolean append);
new FileOutputStream(File file);
new FileOutputStream(File file, boolean append);
new FileOutputStream(FileDescriptor obj);
// 其中append参数为true时,表示每次调用write方法写数据时写到文件的末尾。

2、写数据

fos.write(123);
// write方法的三种入参
void write(int b);
void write(byte[] b);
void write(byte[] b, int off, int len);

3、关闭输出流对象

fos.close();
2.2.2 FileInputStream

输入流,程序读文件时使用。

使用步骤如下:

1、创建输入流对象

// 向指定名称的文件读取数据。
 FileInputStream fis = new FileInputStream("def.txt");

2、循化读数据

int b;
while ((b=fis.read())!=-1) {
	// b为每次读区到的1个字节。
}
// write方法的三种入参
int read();
int read(byte b[]);
int read(byte b[], int off, int len);

3、关闭输入流对象

fis.close();
2.2.3 BufferOutputStream 和 BufferedInputStream

缓冲字节流,使用步骤同FileOutputStream和FileInputStream,只是创建对象时略有不同:

BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("abc.txt"));
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("def.txt"));
2.3 常用的字符流
2.3.1 OutputStreamWriter

字符输出流,写字符。

OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("def.txt"));

写数据的方式:

  • void write(int c)
  • void write(char[] cbuf)
  • void write(char[] cbuf, int off, int len)
  • void write(String str)
  • void write(String str, int off, int len)
2.3.2 InputStreamReader

字符输入流,读字符。

 InputStreamReader isr = new InputStreamReader(new FileInputStream("abc.txt"))

读数据的方式:

  • int read()
  • int read(char[] cbuf)
2.3.3 FileWriter和FileReader

对象实例化方式不同,可以直接用文件的路径入参。

FileWriter fw = new FileWriter("abc.txt");

内部默认以FileOutputStream对象入参。

2.3.4 BufferedWriter和BufferedReader

字符缓冲流。

BufferedReader br = new BufferedReader(new FileReader("abc.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("def.txt"));

3、熟悉jdk8中IO框架的相关源码

3、熟悉jdk8中IO框架的相关源码

  • File
  • 输入流
    • InputStream(基类)
      • FileInputSream
        • BufferedInputStream
        • DataInputStream
      • ByteArrayInputStream
      • FilterInputStream
        • PushbackInputStream
      • ObjectInputStream
      • PipedInputStream
      • SequenceInputStream
      • StringBufferInputStream
    • Reader(基类)
      • InputSreamReader
        • FileReader
      • BufferedReader
        • LineNumberReader
      • CharArrayReader
      • FilterReader
        • PushbackReader
      • PipedReader
      • StringReader
  • 输出流
    • OutputSream(基类)
      • FileOutputStream
        • BufferedOutputStream
        • DataOutputStream
      • ByteArrayOutputStream
      • FilterOutputStream
        • PrintStream
      • ObjectOutputStream
      • PipedOutputStream
    • Writer(基类)
      • OutputStreamWriter
        • FileWriter
      • BufferedWriter
      • CharArrayWriter
      • FilterWriter
      • PipedWriter
      • PrintWriter
      • StringWriter
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值