java IO(Input/Output)是Java平台中的重要组成部分,用于处理不同数据源和目标之间的数据传输。
对于程序来说:输入是读,输出是写。
以下是Java IO的一些关键知识点:
一、流的分类:
1、按流向分:输入流(Input Stream)和输出流(Output Stream)
2、按数据类型分:字节流(Byte Stream)和字符流(Character Stream)
2.1、字节流:InputStream 和 OutputStream 家族,处理单个字节的数据,如 FileInputStream 和 FileOutputStream
2.2、字符流:Reader 和 Writer 家族,处理Unicode字符,如 FileReader 和 FileWriter
3、按功能分:节点流(处理特定数据源或目标)和处理流(处理其他流,提供额外功能)
3.1、节点流:直接连接到数据源或目的地,如FileInputStream
3.2、处理流:用于包装其他流,提供过滤、转换等功能,如BufferedInputStream
二、File类:
1、表示文件和目录路径名的抽象表示
2、提供文件和目录的基本操作,如创建、删除、重命名等
三、流的层次结构:
1、InputStream 和 OutputStream 是所有字节输入和输出流的基类
2、Reader 和 Writer 是所有字符输入和输出流的基类
3、具体的子类如 FileInputStream 和 FileReader 分别继承自对应的基类,并添加了针对文件的操作
四、缓冲流(Buffered Streams):
1、提高性能,通过内部缓冲区批量处理数据
2、如 BufferedInputStream 和 BufferedReader
五、转换流(Wrapper Streams):
1、用于将字节流转换为字符流,或者反之
2、如 InputStreamReader 和 OutputStreamWriter
六、对象序列化流(Object Streams):
1、对象可以被序列化到流中,如 ObjectOutputStream 和 ObjectInputStream
2、支持对象的持久化和网络传输
七、数据流(Data Streams):
1、处理基本数据类型的流,如 DataInputStream 和 DataOutputStream
2、支持read/write primitive Java数据类型
八、字符编码与解码:
1、字符流使用字符编码,如UTF-8,GBK等
2、InputStreamReader 和 OutputStreamWriter 可以指定字符集
九、管道流(Piped Streams):
用于线程间的通信,允许一个线程写入数据,另一个线程读取数据
十、过滤流(Filter Streams):
1、提供额外的功能,如检查、压缩、加密等
2、如 FilterInputStream 和 FilterReader
十一、文件系统操作:
File类提供了文件和目录的创建、删除、重命名以及获取文件属性的方法
十二、NIO(New IO):
从Java 1.4开始引入,提供了非阻塞I/O操作,基于通道(Channels)和选择器(Selectors)
十三、异步与同步,阻塞与非阻塞:
1、同步I/O操作会等待数据准备好后才返回
2、异步I/O操作在数据准备好前就返回,通常通过回调或事件通知
3、阻塞I/O会挂起线程直到数据可用
4、非阻塞I/O允许线程在数据未准备好时继续执行其他任务
十四、Java中的目录
1、创建目录:
File类中有两个方法可以用来创建文件夹:
mkdir( )方法创建一个文件夹,成功则返回true,失败则返回false。失败表明File对象指定的路径已经存在,或者由于整个路径还不存在,该文件夹不能被创建。
mkdirs()方法创建一个文件夹和它的所有父文件夹。
注意: Java 在 UNIX 和 Windows 自动按约定分辨文件路径分隔符。如果你在 Windows 版本的 Java 中使用分隔符 (/) ,路径依然能够被正确解析。
2、读取目录
2.1、一个目录其实就是一个 File 对象,它包含其他文件和文件夹。
2.2、如果创建一个 File 对象并且它是一个目录,那么调用 isDirectory() 方法会返回 true。
2.3、可以通过调用该对象上的 list() 方法,来提取它包含的文件和文件夹的列表。
3、删除目录或文件
3.1、删除文件可以使用 java.io.File.delete() 方法。
3.2、以下代码会删除目录 /tmp/java/,需要注意的是当删除某一目录时,必须保证该目录下没有其他文件才能正确删除,否则将删除失败。
这些是Java IO的基础知识点,理解这些概念对于编写涉及文件操作、网络通信或数据传输的Java程序至关重要。