云霄:
仅为学习Java的基础IO流学习实例
代码示例
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Scanner;
public class IODemo {
Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
IODemo Iod = new IODemo();
Iod.FileOperate();
}
public void FileOperate() {
System.out.println("IO流文件操作:\n1--创建文件,2--文件复制");
//使用switch进行选择
switch (sc.nextInt()) {
case 1 -> { //调用创建文件方法
try {
createFile();
} catch (IOException e) {
e.printStackTrace();
}
}
case 2 -> { //调用复制文件方法
try {
copyFile();
} catch (IOException e) {
e.printStackTrace();
}
}
default -> System.out.println("暂无此操作");
}
}
//创建文件操作方法
public void createFile() throws IOException {
File file; //声明file对象
System.out.println("输入要创建的文件路径(不包含文件名)");
String path = sc.next(); //路径变量
file = new File(path);
if (!file.isFile()) {
//如果目录不存在
if (!file.isDirectory()) {
System.out.println("\n创建文件目录" + file.mkdir());
System.out.println("\n是否创建当前目录下文件?(Y/N)");
//使用增强switch来进行选择
switch (sc.next()) { //接收用户输入值
case "Y" -> {
System.out.println("\n输入文件名");
String filename = sc.next();
//重定义file实例
file = new File(path + filename);
//文件是否成功创建的变量
if (file.createNewFile()) {
System.out.println("文件已创建!");
//返回选择方法
FileOperate();
}
}
case "N" -> System.out.println("文件取消创建!");
default -> System.out.println("输入Y/N,表乱搞!");
}
} else {
System.out.println("目录已存在");
//返回选择方法
FileOperate();
}
} else {
System.out.println("输入路径而不是文件!!!");
//返回选择方法
FileOperate();
}
}
//复制文件操作方法
public void copyFile() throws IOException {
FileInputStream in; //声明输入流
FileOutputStream out; //声明输出流
System.out.println("输入复制目标文件路径");
String copyPath = sc.next();
in = new FileInputStream(copyPath);
//--方式一:默认无法读取中文,输出乱码
int data; //声明存储字节变量
System.out.println("文件可读取字节数为: " + in.available());
System.out.println("\n文件内容为:\n");
System.out.println("方式一: 默认无法读取中文,输出乱码");
while ((data = in.read()) != -1) {
System.out.print((char) data);
}
System.out.println();
//--方式二:可读取中文,最大读取文件大小为2G --Java11
System.out.println("方式二: 可读取中文,最大读取文件大小为2G");
System.out.println(Files.readString(Path.of(copyPath)));
System.out.println("输入粘贴目标文件路径");
String pastePath = sc.next();
System.out.println("选择复制操作方式: 1--常规复制,2--语法糖复制");
out = new FileOutputStream(pastePath);
switch (sc.nextInt()) {
case 1 -> {
//普通方式
byte[] arr = new byte[10];
int len;
while ((len =in.read(arr)) !=-1){
out.write(arr, 0, len);
}
System.out.println("复制操作已完成!");
}
case 2 -> {
//语法糖复制操作
Path path = Paths.get(copyPath);
//文件复制操作
Files.copy(path, out);
System.out.println("复制操作已完成!");
}
default -> FileOperate();
}
//返回选择方法
FileOperate();
}
}
运行结果