案例1
要求:
扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包含目录),并且后续询问用户是否要删除该文件。
代码实现:
package shixun;
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
public class demo1 {
public static void main(String[] args) throws IOException {
Scanner scanner=new Scanner(System.in);
System.out.println("请输入要扫描的路径");
File roorDir = new File(scanner.next());
if (!roorDir.isDirectory()){
System.out.println("您输入的目录不存在");
return;
}
System.out.println("请输入要搜索的关键词");
String toDelete=scanner.next();
scanDir(roorDir,toDelete);
}
private static void scanDir(File roorDir, String toDelete) throws IOException {
System.out.println("当前访问:"+ roorDir.getCanonicalPath());
File[] files = roorDir.listFiles();
if (files == null){
return;
}
//如果目录非空,则循环遍历每个元素
for (File f : files) {
if (f.isDirectory()){
scanDir(f,toDelete);
}else {
// 不是目录,是普通文件,判定文件名是否符合要求,是否要进行删除
checkDelete(f,toDelete);
}
}
}
private static void checkDelete(File f, String toDelete) throws IOException {
if (f.getName().contains(toDelete)){
System.out.println("该单词"+toDelete+"被"+f.getCanonicalPath()+"包含了,是否要删除?(Y/N)");
Scanner scanner=new Scanner(System.in);
String choice=scanner.next();
if (choice.equals("Y") || choice.equals("y")){
f.delete();
System.out.println("删除成功");
}
}
}
}
删除成功:
案例2
要求:
进行普通文件的复制
我们把第一个文件打开,把里面的内容逐个字节的读出来,写入到第二个文件中即可。
代码实现:
package shixun;
import java.io.*;
import java.util.Scanner;
public class demo2 {
public static void main(String[] args) throws IOException {
//实现文件复制
//先输入复制哪个文件,以及把这个文件复制到哪里去
Scanner scanner=new Scanner(System.in);
System.out.println("请输入源文件:");
File srcFile= new File(scanner.next());
System.out.println("请输入目标文件");
File destFile= new File(scanner.next());
if (!srcFile.isFile()){
System.out.println("输入的源文件有误!");
return;
}
if (!destFile.getParentFile().isDirectory()){
System.out.println("输入的目标文件有误");
return;
}
InputStream inputStream = new FileInputStream(srcFile);
OutputStream outputStream = new FileOutputStream(destFile);
while (true){
int ret= inputStream.read();
if (ret==-1){
break;
}
outputStream.write(ret);
}
}
}
案例3
要求:
扫描指定目录,并找到名称或者内容中包含指定字符的所有普通文件(不包含目录)
(注意:我们现在的方案性能较差,所以尽量不要在太复杂的目录下或者大文件下实验)
代码实现:
package shixun;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;
public class demo3 {
public static void main(String[] args) throws IOException {
Scanner scanner=new Scanner(System.in);
System.out.println("请输入要扫描的路径");
File roorDir = new File(scanner.next());
if (!roorDir.isDirectory()){
System.out.println("您输入的目录不存在");
return;
}
System.out.println("请输入要搜索的关键词");
String toFind=scanner.next();
scanDir(roorDir,toFind);
}
private static void scanDir(File roorDir, String toDelete) throws IOException {
System.out.println("当前访问:"+ roorDir.getCanonicalPath());
File[] files = roorDir.listFiles();
if (files == null){
return;
}
//如果目录非空,则循环遍历每个元素
for (File f : files) {
if (f.isDirectory()){
scanDir(f,toDelete);
}else {
// 不是目录,是普通文件,判定文件名是否符合要求,是否要进行删除
checkDelete(f,toDelete);
}
}
}
private static void checkDelete(File f, String toFind) throws IOException {
//先检查文件名
if(f.getName().contains(toFind)){
System.out.println(f.getCanonicalPath()+"文件名中包含"+toFind);
}
//再检查文件内容
InputStream inputStream = new FileInputStream(f);
StringBuilder stringBuilder=new StringBuilder();
Scanner scanner=new Scanner(inputStream);
while(scanner.hasNextLine()){
stringBuilder.append(scanner.nextLine()+"\n");
}
if (stringBuilder.indexOf(toFind) > -1){
System.out.println(f.getCanonicalPath()+"文件内容包括" + toFind);
}
}
}
(data.txt的文件内容为data)