三个关于文件操作的实例

文章介绍了使用Java实现的三个示例:在指定目录下查找包含关键字的文件、复制文件到指定路径以及查询文件内容中的关键字,涉及递归搜索、文件I/O操作和路径合法性检查。
摘要由CSDN通过智能技术生成

内容是:通过文件操作,完成一些小的需求。用来查询某文件或者某个文件里面的关键字

1.例子一

(1)需求:在一个指定的目录下,找到包含该关键字的所有文件

(2)要求输入:一个目录、一个关键词

(3)效果展示

(4)思路

        输入一个目录和关键字,然后我们就去递归搜索该目录,第一步:先列出该目录下的所有子目录。第二步:遍历所有子目录;如果该子目录是文件,则读取该文件,判断是否包含关键字;如果是目录,则递归下去。第三步:如果该目录为空,结束该轮递归。

(5)完整代码

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class demo1 {

    //在一个指定的目录下,找到包含一个关键词的文件
    public static void main(String[] args) throws IOException {
        //1.输入
        Scanner in = new Scanner(System.in);
            System.out.println("请输入一个文件目录:");
            String s1 = in.next();
            System.out.println("请输入要查询的关键词:");
            String s2 = in.next();
            //2.判断输入的路径是否正确
            File file = new File(s1);
            if(!file.isDirectory()) {
                System.out.println("输入的目录不正确");
                return;
            }
            //3.开始查询
            findFile(file,s2);

    }
    private static void findFile(File file, String s2) {
        //1.列出当前目录下的所有子目录
        File[] files = file.listFiles();
        //2.当前目录下为空,为递归出口
        if(files==null) {
            return;
        }
        for(File f : files) {
          if(f.isFile()) {//是普通文件
              String ss = f.getName();
              //ss.equals(s2) 这是找到文件名一样的文件
              if(ss.contains(s2)) {
                  System.out.println("找到包含'"+s2+"' 关键字的路径"+f.getAbsolutePath());//该文件包含关键字就打出出绝对路径

              }
          }else if(f.isDirectory()){//是目录,就递归下一层
              findFile(f,s2);
          }
        }
    }

}

2.例子二

(1)需求:把一个文件复制到指定路径下

(2)输入:一个被复制文件的绝对路径,和一个目的路径

(3)效果

其实,就是把一个文件路径,复制一份(换了一个路径和文件名字)

(4)思路

第一步:输入两个路径。第二步:检查两个路径是否合法。第三步:将文件内容逐步复制到目标文件下。

(5)思路

import java.io.*;
import java.util.Scanner;

public class demo2 {
    public static void main(String[] args){
        //1.输入
        Scanner in = new Scanner(System.in);
        System.out.println("输入要复制的文件路径:");
        String s1 = in.next();
        System.out.println("请输入要复制到的目录下");//包括文件的名字:也就是一个文件的绝对路径
        String s2 = in.next();
        //2.检查
        File file1 = new File(s1);
        if(!file1.isFile()) {//检查要复制的文件是否存在
            System.out.println("文件不存在");
            return;
        }
        //检查目标目录的上一级目录是否存在,file2.getParentFile()返回一个File对象,就可以直接判断该路径是否合法
        File file2 = new File(s2);
        if(!file2.getParentFile().isDirectory()) {
            System.out.println("目标路径非法");
            return;
        }

        try(InputStream inputStream = new FileInputStream(s1);OutputStream outputStream = new FileOutputStream(s2)) {
            while (true) {
                byte[] bytes = new byte[1024];
                int n = inputStream.read(bytes);
                if(n==-1) break;
                outputStream.write(bytes,0,n);
            }

        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

    }
}

3.例子三

(1)需求:查询指定文件路径下的带有关键字的文件内容

(2)输入:一个目标文件,和一个关键词(文件内容)

(3)效果

注意:这种查询的效率是非常的慢的,所以要指定非常细致的目录才能展示出效果

(4)思想

第一步:输入一个路径和关键词。第二步:判断路径的合法性。第三步:递归查询该目录的子目录;如果是路径,则继续递归;如果是文件,则直接查询文件内容。

(5)完整代码

import java.io.*;
import java.util.Scanner;



public class demo3 {

    public static void main(String[] args) {
        //1.输入
        Scanner in = new Scanner(System.in);
        System.out.println("输入要查询的文件路径:");
        String s1 = in.next();
        System.out.println("请输入要查询的文件内容关键字:");//包括文件的名字:也就是一个文件的绝对路径
        String s2 = in.next();
        //2.检查合法性
        File file1 = new File(s1);
        if(!file1.isDirectory()) {
            System.out.println("查询目录非法");
            return;
        }
        //3.递归查询
        findFile(file1,s2);
    }

    private static void findFile(File file1, String s2) {
        File[] files = file1.listFiles();
        if(files == null) {
            return;
        }
        for(File f : files) {
            if(f.isFile()) {
                find(f,s2);
            }else if(f.isDirectory()) {
                findFile(f,s2);
            }
        }
    }

    private static void find(File f, String s2) {
        try(InputStream inputStream = new FileInputStream(f)) {
            //StringBuilder s = new StringBuilder();//将文件的内容全部拼接在一个字符串上面
            String s = new String();
            while (true) {
                int n = inputStream.read();
                if(n==-1) break;
                s+=(char)n;
            }
            if(s.indexOf(s2)>=0) {
                System.out.println("找到了:"+f.getAbsolutePath());
            }
        }catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

}

  • 22
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码小娥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值