IO流概述
什么是IO流?
-
IO流指的是:程序中数据的流动。数据可以从内存流动到硬盘,也可以从硬盘流动到内存。
-
Java中IO流最基本的作用是:完成文件的读和写。
IO流的分类?
-
根据数据流向分为:输入和输出是相对于内存而言的。
-
输入流:从硬盘到内存。(输入又叫做读:read)
-
输出流:从内存到硬盘。(输出又叫做写:write)
-
-
根据读写数据形式分为:
- 字节流:一次读取一个字节。适合读取非文本数据。例如图片、声音、视频等文件。(当然字节流是万能的。什么都可以读和写。)
- 字符流:一次读取一个字符。只适合读取普通文本。不适合读取二进制文件。因为字符流统一使用Unicode编码,可以避免出现编码混乱的问题。
注意:Java的所有IO流中凡是以Stream结尾的都是字节流。凡是以Reader和Writer结尾的都是字符流。
- 根据流在IO操作中的作用和实现方式来分类:
- 节点流:节点流负责数据源和数据目的地的连接,是IO中最基本的组成部分。
- 处理流:处理流对节点流进行装饰/包装,提供更多高级处理操作,方便用户进行数据处理。
- Java中已经将io流实现了,在java.io包下,可以直接使用。
IO流体系结构
-
以下4种常用流,都是抽象类,是所有IO流的四大头领!
- InputStream:字节输入流
- OutputStream:字节输出流
- Reader:字符输入流
- Writer:字符输出流
-
所有的流都实现了Closeable接口,都有close()方法,流用完要关闭。
-
所有的输出流都实现了Flushable接口,都有flush()方法,flush方法的作用是,将缓存清空,全部写出。养成好习惯,以防数据丢失。
文件路径
绝对路径
FileInputStream in = new FileInputStream("D:/code/filePath.txt");
相对路径
// 在IDEA工具中,默认的当前路径是project的根。(项目的根就是当前路径)
FileInputStream in = new FileInputStream("log");
类路径
// 优点:在进行系统移植的时候,这种方式仍然是通用的,适应性强。
// 缺点:资源必须放在类路径当中。如果没有在类路径下,是无法加载到的。
// 表示当前路径就是类的根路径,自动从类的根路径下开始加载资源。
String path = Thread.currentThread().getContextClassLoader().getResource("test/file").getPath();
FileInputStream in = new FileInputStream(path);
标签:字符,Java,字节,路径,IO,FileInputStream
From: https://www.cnblogs.com/growingbambi/p/18652220