Java之IO流
流的概念:
在程序的开发中IO的核心就是:输入和输出。
输入和输出是相对的,可能来自不同的环境。
对于服务器或者是客户端而言,传递的就是一种数据流的处理形式,而所谓的数据流指的就是字节数据。
这种的处理形式在java.io包里提供了两类支持:
- 字节处理流:OutputStream(输出字节流)、InputStream(输入字节流)
- 字符处理流:Writer(输出字符流)、Reader(输入字符流)
所有的流操作都应该统一步骤,以文件处理的流程为例:
- 进行文件的读写操作,通过File类找到文件路径;
- 通过字节流或字符流的子类为父类实例化;
- 利用字节流或字符流中的方法实现数据的输入与输出;
- 流的操作属于资源操作,而资源的操作必须进行关闭;
OutputStream抽象类:
| NO | 方法名称 | 类型 | 作用 |
| 1 |
public abstract void write(int b) throws IOException;
|
普通 | 输出单个字节数据 |
| 2 |
public void write(byte[ b) throws IOException; // 用得最多
|
普通 | 输出一组字节数据 |
| 3 |
public void write(byte[] b, int off, int len) throws IOException;
|
普通 | 输出部分数据 |
要想使用OutputStream抽象类,就需要使用它的子类去向上转型。
关注的核心在子类FileOutputStream的构造方法上:
【覆盖】构造方法:public FileOutputStream(File file) throws FileNotFoundException; // 每次执行程序新的内容都会覆盖旧的内容
OutputStream output = new FileOutputStream(file);
【追加】构造方法:public FileOutputStream(File file, boolean append) throws FileNotFoundException; // 执行程序后在旧的内容后添加新的内容
OutputStream output = new FileOutputStream(file,true);
使用OutputStream类实现内容的输出:
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
public class MAIN {
public static void main(String[] args) throws Exception {
File file = new File("D:" + File.separator + "Demo_2_15" + File.separator + "OutputStream.txt"); // 指定操作文件的路径
if (!file.getParentFile().exists()){ // 如果文件父路径不存在
file.getParentFile().mkdirs(); // 创建父路径
}
OutputStream output = new FileOutputStream(file); // 子类实例化,覆盖类型的构造方法
String str = "www.baidu.com"; // 输出的内容
output.write(str.getBytes(StandardCharsets.UTF_8)); // 将字符串转换为字节数组
output.close(); // 关闭资源
}
}
import java.io.*;
import java.nio.charset.StandardCharsets;
public class MAIN {
public static void main(String[] args) {
File file = new File("D:" + File.separator + "Demo_2_15" + File.separator + "OutputStream.txt"); // 指定操作文件的路径
if (!file.getParentFile().exists()){ // 如果文件父路径不存在
file.getParentFile().mkdirs(); // 创建父路径
}
try (OutputStream output = new FileOutputStream(file,true)){ // 子类实例化,追加类型的构造方法
String str = "www.baidu.com1"; // 输出的内容
output.write(str.getBytes(StandardCharsets.UTF_8)); // 将字符串转换为字节数组
} catch (IOException e) {
e.printStackTrace();
}
}
}
程序采用了标准的形式实现了输出的操作处理,并且在整体的处理之中,只是创建了文件的父目录,但是并没有创建文件,而在执行后发现文件自动完成了创建。
由于OutputStream的子类也属于AutoCloseable接口的子类,所以对于close()方法也可以简化使用。
import java.io.*;
import java.nio.charset.StandardCharsets;
public class MAIN {
public static void main(String[] args) {
File file = new File("D:" + File.separator + "Demo_2_15" + File.separator + "OutputStream.txt"); // 指定操作文件的路径
if (!file.getParentFile().exists()){ // 如果文件父路径不存在
file.getParentFile().mkdirs(); // 创建父路径
}
try (OutputStream output = new FileOutputStream(file)){ // 子类实例化
String str = "www.baidu.com1"; // 输出的内容
output.write(str.getBytes(StandardCharsets.UTF_8)); // 将字符串转换为字节数组
} catch (IOException e) {
e.printStackTrace();
}
}
}