以下这几个类都是抽象类.并且都有对于文件操作的具体实现类.File+类名就是具体的实现类
以二进制方式读.有两个主要方法.
该方法有三个版本
关闭字节流.Java的数据流在使用结束时都需要手动关闭字节流.否则长时间未关闭会产生内存泄漏的危险.
以二进制方式写.有三个主要方法.默认此操作每次都会清空旧的内容.向内部写入新的内容.如果需要追加需要添加参数,
该方法同样有三个版本
与InputStream流相同,使用结束需要关闭流.否则会产生危险.
清空缓存区.
因为I/O 的速度是很慢的,所以大多的 OutputStream 为了减少设备操作的次数,就先将I/O内容先写到一片内存中(缓冲区).等到缓冲区满了,或者达成一定条件时才真正将数据写入设备中.
这样的操作提升了一定的效率,但造成一个后果.就是我们写的数据,很可能会遗留一部分在缓冲区中.所以我们就需要这样一个操作.在合适的时候,让缓冲区中的内容全部写入设备(清空缓冲区).
用法和以字节读写类似,不同的是操作对象: 一个操作字节,一个操作字符.
以字符方式读.与InputStream类似.有 read()和close() 方法.并且用法也类似.
该方法有三个版本
关闭字符流.
以字符方式写.与OutputStream类似.有 write(),close()和flash() 方法.并且用法也类似.
该方法同样有三个版本
关闭字符流.
清空缓存区.
这几个实现类的构造方法类似.这里以FileInputStream为例.
需要注意的是,这几个写入流都是清空原有文件数据,重新写入新的数据.如果想要追加数据的话.需要在构造方法参数后面添加true.
FileOutputStream(String name,boolean bo);这里的第二个参数为true时就是向文件中追加内容.
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();
}
}
}