1.按照读写方式来分
以下这几个类都是抽象类.并且都有对于文件操作的具体实现类.File+类名就是具体的实现类
1.1.二进制方式读写
1.1.1.InputStream
以二进制方式读.有两个主要方法.
1.read();
该方法有三个版本
- 无参: read() 读取一个字节的数据,返回 -1 表示读取结束
- 一个参数: read(byte[] b) 最多读取 b.length 字节的数据到 b 中,返回值是实际读到的数量;返回 -1 表示读取结束.读取到的内容会存储在传入的数组参数中.
- 三个参数: read(byte[] b, int off, int len) 最多读取 (len-off)个字节的数据到 b 中,放在byte数组中,从 off 开始,返回实际读到的数量;返回 -1 表示读取结束.读取到的内容会存储在传入的数组参数中.
2.close();
关闭字节流.Java的数据流在使用结束时都需要手动关闭字节流.否则长时间未关闭会产生内存泄漏的危险.
1.1.2.OutputStream
以二进制方式写.有三个主要方法.默认此操作每次都会清空旧的内容.向内部写入新的内容.如果需要追加需要添加参数,
1.write();
该方法同样有三个版本
- 一个int型的参数: write(int b) 写入一个字节
- 一个字节数组的参数: write(byte[] b) 将 b 这个字符数组中的数据全部写入 os 中
- 三个参数: write(byte[] b, int off, int len) 将 b 这个字符数组中从 off 开始写入 len 个长度的数据
2.close();
与InputStream流相同,使用结束需要关闭流.否则会产生危险.
3.flash();
清空缓存区.
因为I/O 的速度是很慢的,所以大多的 OutputStream 为了减少设备操作的次数,就先将I/O内容先写到一片内存中(缓冲区).等到缓冲区满了,或者达成一定条件时才真正将数据写入设备中.
这样的操作提升了一定的效率,但造成一个后果.就是我们写的数据,很可能会遗留一部分在缓冲区中.所以我们就需要这样一个操作.在合适的时候,让缓冲区中的内容全部写入设备(清空缓冲区).
1.2.字符方式读写
用法和以字节读写类似,不同的是操作对象: 一个操作字节,一个操作字符.
1.2.1.Reader
以字符方式读.与InputStream类似.有 read()和close() 方法.并且用法也类似.
1.read();
该方法有三个版本
- 无参: read()
- 一个参数: read(char[] b)
- 三个参数: read(char[] b, int off, int len)
2.close();
关闭字符流.
1.2.2.Writer
以字符方式写.与OutputStream类似.有 write(),close()和flash() 方法.并且用法也类似.
1.write();
该方法同样有三个版本
- 一个int型的参数: write(int b)
- 一个字符数组的参数: write(char[] b)
- 三个参数: write(char[] b, int off, int len)
2.close();
关闭字符流.
3.flash();
清空缓存区.
2.具体的实现类
- FileInputStream
- FileOutputStream
- FIleReader
- FileWriter
2.1构造方法
这几个实现类的构造方法类似.这里以FileInputStream为例.
- FileInputStream(File file) : 利用 File 构造文件输入流
- FileInputStream(String name) : 利用文件路径构造文件输入流
需要注意的是,这几个写入流都是清空原有文件数据,重新写入新的数据.如果想要追加数据的话.需要在构造方法参数后面添加true.文章来源:https://www.toymoban.com/news/detail-600418.html
FileOutputStream(String name,boolean bo);这里的第二个参数为true时就是向文件中追加内容.文章来源地址https://www.toymoban.com/news/detail-600418.html
3.复制文件案例
import java.io.*;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入要拷贝的源路径");
String src = scanner.next();
System.out.println("请输入要拷贝的目标路径");
String dest = scanner.next();
File srcFile = new File(src);
if (!srcFile.isFile()) {
System.out.println("输入源路径有误");
return;
}
try (InputStream inputStream = new FileInputStream(src)) {
try (OutputStream outputStream = new FileOutputStream(dest)) {
byte[] buffer = new byte[1024];
while (true) {
int len = inputStream.read(buffer);
if (len == -1) {
break;
}
outputStream.write(buffer, 0, len);
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
到了这里,关于Java文件读写数据流的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!