一、相关概念
流: 流向,从一端到另一端,是一个动态的、抽象的概念,是一串连续动态的数据集合。
数据: 提供数据的原始媒介,如数据库、文件等。
在Java中,对于数据的输入输出以流的方式进行的。jdk中封装了各种各样的关于流的类,在java.io包中。
java中重要的关于流的类和接口
类 | 说明 |
---|---|
File | 文件类 |
InputStream | 字节输入流 |
OutputStream | 字节输出流 |
Reader | 字符输入流 |
Writer | 字符输出流 |
Closeable | 关闭流接口 |
Flushable | 刷新流接口 |
Serializable | 序列化接口 |
流分类
方向:
- 输入流:数据源到程序。
- 输出流:程序到目的地。
数据:
- 字节流:按照字节读取数据。
- 字符流:按照字符读取数据,其底层还是基于字节流操作,自动搜寻了指定的码 表。
功能:
- 节点流:可以直接从数据源或目的地读写数据。
- 包装流:不直接连接到数据源或目的地,是其他流进行封装。目的主要是简化操作和提高性能。
FileInputStream和FileOutputStream使用
- FileInputStream:通过字节的方式读取文件,适合读取所有类型的文件(图像、视频等).
- FileOutputStream: 通过字节的方式写出或追加数据到文件,适合所有类型的文件(图像、视频等).
图片的复制
这里拿我女神的照片练习IO?
FileInputStream fis = null;
FileOutputStream fos = null;
File file = new File("F:\\Code\\IDEA\\IO\\img\\a.jpg");
try {
fis = new FileInputStream(file);
fos = new FileOutputStream(new File("F:\\Code\\IDEA\\IO\\img\\b.jpg"));
byte[] b = new byte[1024];
int i = -1;
while((i = fis.read(b)) != -1){
fos.write(b);
}
fos.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
FileReader和FileWrite使用
- FileReader:通过字符的方式读取文件,仅适合字符文件.
- FileWrite:通过字节的方式写出或追加数据到文件中,仅适合字符文件.
文件复制
FileReader fr = null;
FileWriter fw = null;
try {
fr = new FileReader(new File("F:\\Code\\IDEA\\IO\\text\\a.text"));
fw = new FileWriter(new File("F:\\Code\\IDEA\\IO\\text\\b.text"));
int i = -1;
while((i = fr.read()) != -1) {
fw.write(i);
}
fw.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}