File对象

在计算机系统中,文件是非常重要的存储方式。Java的标准库java.io提供了File对象来操作文件和目录。 要构造一个File对象,需要传入文件路径: import java.io.*; public class Main { public static void main(String args) { File f = new File("C:\\Windows\\notepad.exe"
File对象

InputStream

InputStream就是Java标准库提供的最基本的输入流。它位于java.io这个包里。java.io包提供了所有同步IO的功能。 要特别注意的一点是,InputStream并不是一个接口,而是一个抽象类,它是所有输入流的超类。这个抽象类定义的一个最重要的方法就是int read(),签名如下: public abstract int read() throws IOException; 这个
InputStream

OutputStream

和InputStream相反,OutputStream是Java标准库提供的最基本的输出流。 和InputStream类似,OutputStream也是抽象类,它是所有输出流的超类。这个抽象类定义的一个最重要的方法就是void write(int b),签名如下: public abstract void write(int b) throws IOException; 这个方法会写入一个字节到输
OutputStream

操作Zip

ZipInputStream是一种FilterInputStream,它可以直接读取zip包的内容: ┌───────────────────┐ │ InputStream │ └───────────────────┘ ▲ │ ┌───────────────────┐ │ FilterInputStream │ └───────────────────┘ ▲ │ ┌──────────────
操作Zip

Filter模式

Java的IO标准库提供的InputStream根据来源可以包括: FileInputStream:从文件读取数据,是最终数据源; ServletInputStream:从HTTP请求读取数据,是最终数据源; Socket.getInputStream():从TCP连接读取数据,是最终数据源; ... 如果我们要给FileInputStream添加缓冲功能,则可以从FileInputStream派
Filter模式

读取classpath资源

很多Java程序启动的时候,都需要读取配置文件。例如,从一个.properties文件中读取配置: String conf = "C:\\conf\\default.properties"; try (InputStream input = new FileInputStream(conf)) { // TODO: } 这段代码要正常执行,必须在C盘创建conf目录,然后在目录里创建default
读取classpath资源

序列化和反序列化

序列化是指把一个Java对象变成二进制内容,本质上就是一个byte数组。 为什么要把Java对象序列化呢?因为序列化后可以把byte保存到文件中,或者把byte通过网络传输到远程,这样,就相当于把Java对象存储到文件或者通过网络传输出去了。 有序列化,就有反序列化,即把一个二进制内容(也就是byte数组)变回Java对象。有了反序列化,保存到文件中的byte数组又可以“变回”
序列化和反序列化

Reader

Reader是Java的IO库提供的另一个输入流接口。和InputStream的区别是,InputStream是一个字节流,即以byte为单位读取,而Reader是一个字符流,即以char为单位读取: InputStream Reader 字节流,以byte为单位 字符流,以char为单位 读取字节(-1,0~255):int read() 读取字符(-1,0~65535):int read()
Reader