下面三个实例涉及Java基本的IO操作,用于练习。
1.递归删除目标文件
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
public class DeleteFile {
//删除路径下的路径下的文件
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入删除文件所在目录:");
String rootPath = scanner.next();
File rootDir = new File(rootPath);
if (!rootDir.isDirectory()) {
return;
}
System.out.println("输入要删除的文件:");
String delFileName = scanner.next();
//遍历目录,找到要删除的文件进行删除
delFile(rootDir, delFileName);
}
private static void delFile(File rootDir, String delFileName) {
//列出rootDir中的所有内容
File[] list = rootDir.listFiles();
if (list == null) {
return;
}
//遍历当前的内容,如果是普通文件,检测名字;如果是目录,递归到下一层文件夹中
for (File item : list) {
if (item.isFile()) {
if (item.getName().contains(delFileName)) {
//删除文件
boolean flag = MenuHelp(item);
if (flag) {
System.out.println("删除结果:" + item.delete());
}
else{
System.out.println("放弃删除");
}
}
} else if (item.isDirectory()) {
//进入下一层文件夹
delFile(item, delFileName);
}
}
}
private static boolean MenuHelp(File item) {
boolean ret = false;
try {
System.out.println("确认要删除文件" + item.getCanonicalPath() + "吗?(Y/N)");
Scanner scanner = new Scanner(System.in);
String choice = scanner.next();
if (choice.equals("Y") || choice.equals("y")) {
ret = true;
}
} catch (IOException e) {
e.printStackTrace();
}
return ret;
}
}
2. IO操作实现拷贝文件
import java.io.*;
import java.util.Scanner;
public class CopyFile {
//指定两个路径 源路径 srcPath 复制到dstPath
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入要拷贝的源路径");
String srcPath = scanner.next();
File srcFile = new File(srcPath);
System.out.println("输入要拷贝的目的路径");
String dstPath = scanner.next();
File dstFile = new File(dstPath);
if (!srcFile.isFile()) {
System.out.println("源路径出错");
return;
}
//读取源文件拷贝到目的文件中
try (InputStream inputStream = new FileInputStream(srcFile)) {
//打开输出目的文件
try (OutputStream outputStream = new FileOutputStream(dstFile)) {
byte[] buff = new byte[1024];
while (true) {
int size = inputStream.read(buff);
if (size == -1) {
//读取完毕
break;
}
outputStream.write(buff, 0, size);
}
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("写入完成");
}
}
3. 找出所有含有关键字的文件
import java.io.*;
import java.util.Scanner;
public class SearchFile {
//递归遍历文件,查看包含关键字的所有的文件
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入要扫描的路径");
String rootPath = scanner.next();
System.out.println("输入要查询的关键字");
String key = scanner.next();
File rootDir = new File(rootPath);
if (!rootDir.isDirectory()) {
System.out.println("文件路径出错!");
}
//递归遍历路径下的所有文件
disPlayDir(rootDir, key);
}
private static void disPlayDir(File rootDir, String key) {
File[] files = rootDir.listFiles();
if (files == null) {
return;
}
for (File item : files) {
if (item.isFile()) {
//查找关键字是否在文件中
if (inFile(item, key)) {
try {
System.out.println(item.getCanonicalPath());
} catch (IOException e) {
e.printStackTrace();
}
}
} else {
disPlayDir(item, key);
}
}
}
private static boolean inFile(File item, String key) {
StringBuilder stringBuilder = new StringBuilder();
//读出文件中所有内容
try (Reader reader = new FileReader(item)) {
char[] buff = new char[1024];
while (true) {
int size = reader.read(buff);
if (size == -1) {
break;
}
stringBuilder.append(buff, 0, size);
}
} catch (IOException e) {
e.printStackTrace();
}
return stringBuilder.indexOf(key) != -1;
}
}