使用文件的基本操作和文件内容读写操作实现三个功能
前言
最近在学习文件。今天学完了文件的基本操作以及对文件内容的读写操作。写了三个功能,来巩固知识。
1.扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包含目录),并且用户可以选择是否删除该文件
package File;import java.io.File;
import java.util.Scanner;public class demo13 {public static void main(String[] args) {System.out.println("请输入目录");Scanner scanner=new Scanner(System.in);String directory=scanner.next();//这里直接传入directory,不是传入"directory",没有双引号File file=new File(directory);if(!file.isDirectory()){System.out.println("你输入的不是目录");return;}//走到这里,则输入的一定是目录System.out.println("请输入你要查找的关键文件");Scanner scanner1=new Scanner(System.in);String keyfile=scanner1.next();search_file(file,keyfile);}private static void search_file(File file, String keyfile) {//列出当前目录下的所有文件File[] files=file.listFiles();//考虑当前目录下的文件为空的情况if(files==null){return;}//遍历当前目录下的所有文件for(File file1:files){//分为两种情况,一种还是目录,就还得找文件,一种是文件,那就判断是不是要删除的关键文件if(file1.isDirectory()){search_file(file1,keyfile);}if(file1.isFile()){delfile(file1,keyfile);}}}private static void delfile(File files, String keyfile) {if(files.getName().contains(keyfile)){System.out.println(files.getName());System.out.println("已经找到关键文件"+files.getAbsolutePath()+"是否删除(y/n)");Scanner scanner=new Scanner(System.in);String input=scanner.next();//确保输入大写Y小写y都可以删除if(input.equalsIgnoreCase("y")){files.delete();System.out.println("删除成功");return;}}}
}
运行结果如下
2. 进行普通文件的复制
package File;import java.io.*;
import java.util.Scanner;public class demo14 {public static void main(String[] args) {System.out.println("请输入被复制的文件路径");Scanner scanner=new Scanner(System.in);String file1=scanner.next();File srcfile=new File(file1);if(!srcfile.isFile()){System.out.println("该文件不存在或者这个是目录");return;}System.out.println("请输入要复制文件到那里去的路径");Scanner scanner1=new Scanner(System.in);String file2=scanner1.next();File desfile=new File(file2);//这个desfile的文件可以没有,但是它的目录必须有。if(!desfile.getParentFile().isDirectory()){System.out.println("你没有输入目录");return;}try(InputStream inputStream=new FileInputStream(srcfile);OutputStream outputStream=new FileOutputStream(desfile)){while(true){byte[] data=new byte[1024];int n=inputStream.read(data);if(n==-1){break;}outputStream.write(data,0,n);}}catch (IOException e) {throw new RuntimeException(e);}}
}
运行结果如下
注意事项如下
3. 扫描指定目录,并找到名称或者内容中包含指定字符的所有普通文件(不包含目录)
package File;import java.io.*;
import java.util.Scanner;public class demo16 {public static void main(String[] args) {System.out.println("请输入你要搜索的目录");Scanner scanner=new Scanner(System.in);String searchpath=scanner.next();File searchdirectory=new File(searchpath);if(!searchdirectory.isDirectory()){System.out.println("你输入的不是目录");return;}System.out.println("请输入你要查找的关键字");Scanner scanner1=new Scanner(System.in);String keyword=scanner1.next();Search(searchdirectory,keyword);}private static void Search(File searchdirectory, String keyword) {File[] files=searchdirectory.listFiles();if(files==null){return;}for(File file:files){if(file.isDirectory()){Search(file,keyword);}if(file.isFile()){Lookup(file,keyword);}}}private static void Lookup(File file, String keyword) {if(file.getName().contains(keyword)){System.out.println("找到了含有关键字的指定文件了"+file.getAbsolutePath());}//使用StringBuffer来记录内容StringBuffer stringBuffer=new StringBuffer();//因为keyword是字符串,就使用Reader了try(Reader reader=new FileReader(file)){while(true){char[] chars=new char[1024];int n=reader.read(chars);if(n==-1){break;}stringBuffer.append(chars,0,n);}} catch (IOException e) {throw new RuntimeException(e);}//找得到keyword,就返回下标,找不到就返回-1if(stringBuffer.indexOf(keyword)>=0){System.out.println("内容包含关键字"+file.getAbsolutePath());}}}
运行结果
结语
byebye~ 文件的学习暂时结束