• 基于文本IO实现的小程序


    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

    文章目录

    • 前言
    • 一、查找指定的文件
    • 二、进行普通文件的复制
    • 三.查找指定文件或者内容包含指定字符文件


    前言

    基于上一篇学过Io操作的基础应用


    提示:以下是本篇文章正文内容,下面案例可供参考

    一、查找指定的文件

    扫描指定的目录,并找到名称中包含字符的所有普通文件(不包含目录),并且后续询问用户是否要删除该文件

    思路:

    1.先让用户输入:要扫描的路径+你要查找的词

    2.遍历目录,找到名字匹配的文件

    3.询问用户是否删除

    程序:

    1. package io_0929;
    2. import java.io.File;
    3. import java.io.IOException;
    4. import java.util.Scanner;
    5. public class demo6 {
    6. public static void main(String[] args) throws IOException {
    7. // 1.让用户输入必要的信息
    8. Scanner scanner=new Scanner(System.in);
    9. System.out.println("请输入要扫描的路径: ");
    10. File rootDir=new File(scanner.next());
    11. if(!rootDir.isDirectory()){
    12. System.out.println("你输入的目录不存在!");
    13. }
    14. System.out.println("请输入要搜索的关键词: ");
    15. String toDelete=scanner.next();
    16. //2.遍历目录,需要借助一个核心方法,listFile()
    17. scanDir(rootDir,toDelete);
    18. }
    19. //借助这个方法进行递归遍历
    20. private static void scanDir(File rootDir,String toDelete) throws IOException {
    21. System.out.println("当前访问: "+rootDir.getCanonicalPath());
    22. File[]files=rootDir.listFiles();
    23. //说明rootDir是一个空的目录
    24. if(files==null) {
    25. return;
    26. }
    27. //如果目录非空,则循环遍历每个元素
    28. for(File f:files){
    29. if(f.isDirectory()){
    30. scanDir(f,toDelete);
    31. }else{
    32. //不是目录,普通文件,判断文件名是否符合要求,是否要进行删除
    33. checkDelete(f,toDelete);
    34. }
    35. }
    36. }
    37. private static void checkDelete(File f,String toDelete){
    38. if(f.getName().contains(toDelete)){
    39. System.out.println("该单词 "+toDelete);
    40. Scanner scanner=new Scanner(System.in);
    41. String choice=scanner.next();
    42. if(choice.equals("Y")||choice.equals("y")){
    43. f.delete();
    44. }
    45. }
    46. }
    47. }

     

    listFiles():

    能够把当前目录里的文件和子目录列举出来,但是这个方法,只能列出一层,没法直接列出子目录中的子目录

    二、进行普通文件的复制

    把第一个文件打开,把里面的内容逐个字节的读取出来,写入到第二个文件即可

    (使用字节流来进行操作,字节流也是可以用来拷贝文本文件)

    1. Scanner scanner = new Scanner(System.in);
    2. System.out.println("请输入源文件: ");
    3. //srcFile 形如d:/cat.flg
    4. File srcFile = new File(scanner.next());
    5. System.out.println("请输入目标文件");
    6. //destFile 形如 d:/cat2.jpg
    7. if (!srcFile.isFile()) {
    8. System.out.println("输入的源文件有误");
    9. return;
    10. }
    11. File destFile = new File(scanner.next());
    12. if (!destFile.getParentFile().isDirectory()) {
    13. System.out.println("输入的目标文件有误!");
    14. return;
    15. }
    16. //2.打开源文件,按照字节读区内容,一次写入到目标文件中
    17. try (InputStream inputStream = new FileInputStream(srcFile);
    18. OutputStream outputStream = new FileOutputStream(destFile)) {
    19. //读src的每个字节,写入到dest中
    20. while (true) {
    21. int ret = inputStream.read();
    22. if (ret == -1) {
    23. break;
    24. }
    25. outputStream.write(ret);
    26. }
    27. } catch (IOException e) {
    28. e.printStackTrace();
    29. }
    30. }

    三.查找指定文件或者内容包含指定字符文件

    第一个代码的进阶版,第一个代码是判定文件名是否包含关键词,现在还要判断内容是否包含

    1. public static void main(String[] args) throws IOException {
    2. //1.输入路径和要查询的关键词
    3. Scanner scanner=new Scanner(System.in);
    4. System.out.println("请输入要扫描的路径 ");
    5. File rootDir=new File("请输入要查询的词: ");
    6. String toFind=scanner.next();
    7. //2.递归扫描的目录
    8. scanDir(rootDir,toFind);
    9. }
    10. private static void scanDir(File rootDir,String toFind) throws IOException{
    11. File[]files=rootDir.listFiles();
    12. if(files==null){
    13. return;
    14. }
    15. for(File f:files){
    16. if(f.isDirectory()){
    17. scanDir(f,toFind);
    18. }else{
    19. checkFile(f,toFind);
    20. }
    21. }
    22. }
    23. private static void checkFile(File f,String toFind) throws IOException{
    24. //1.先检查文件名
    25. if(f.getName().contains(toFind)){
    26. System.out.println(f.getCanonicalPath()+" 文件名中包含 "+ toFind);
    27. }
    28. //2.再检查文件内容
    29. try(InputStream inputStream=new FileInputStream(f)) {
    30. StringBuilder stringBuilder=new StringBuilder();
    31. Scanner scanner=new Scanner(inputStream);
    32. //这个地方需要按行读取了
    33. while(scanner.hasNextLine()){
    34. stringBuilder.append(scanner.nextLine()+"\n");
    35. }
    36. if(stringBuilder.indexOf(toFind)>-1){
    37. System.out.println(f.getCanonicalPath()+"文件内容包含 "+toFind);
    38. }
    39. }
    40. }

    注意:stringbuilder.indexof()返回指定字符串第一次出现的下标,如果没有出现返回-1;

  • 相关阅读:
    【附源码】计算机毕业设计JAVA互联网保险网站
    Xubuntu16.04系统中解决无法识别exFAT格式的U盘
    Vue项目案例-头条新闻
    @Scheduled定时任务参数解释
    ES6 对象面试题
    为什么有的测试员路越走越窄?原因在这里
    7-6 选取医院建立的位置(C语言版详解)
    枚举的定义和应用(JAVA基础十二)
    代码随想录刷题笔记10——动态规划
    排序学习总结
  • 原文地址:https://blog.csdn.net/panpanaa/article/details/127696505