文件操作与IO(一些小项目)

简介: 文件操作与IO(一些小项目)

在指定目录中寻找文件

扫描指定目录,并找到名称对应的所有文件(不包含目录).

import java.io.File;
import java.util.Scanner;
 
public class Project1 {
    public static void main(String[] args) {
        //1.输入必要的信息
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要搜索的文件名: ");
        String fileName = sc.next();
        System.out.println("请输入要搜索的目录: ");
        String rootPath = sc.next();
        File rootFile = new File(rootPath);
        if(!rootFile.isDirectory()) {
            System.out.println("输入的答案有误!");
            return;
        }
 
        // 2.有了要搜索的路径之后,就可以按照递归的方式来搜索
        // 知道递归的起点, 还需要知道查询的文件名.
        scanDir(rootFile, fileName);
    }
 
    private static void scanDir(File rootFile, String fileName) {
        //1.把当前目录中的文件和子目录都列出来
        File[] files = rootFile.listFiles();
        if(files == null) {
            //空的目录,返回即可
            return;
        }
        //2.遍历上述files,判定每一个file是目录还是文件
        for(File f : files) {
            System.out.println("当前遍历到: " + f.getAbsolutePath());
            if(f.isFile()) {
                //普通文件,判定文件名是否是搜索的文件
                if(fileName.equals(f.getName())) {
                    System.out.println("找到了符合要求的文件! " + f.getAbsolutePath());
                }
            } else if (f.isDirectory()) {
                //目录文件,就需要进一步的递归
                scanDir(f, fileName);
            } else {
                //这个else暂时不需要
                ;
            }
        }
    }
}

进行普通文件的复制

import java.io.*;
import java.util.Scanner;
 
public class Project2 {
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要复制的源文件: ");
        String srcPath = sc.next();
        System.out.println("请输入要复制的目标文件");
        String destPath = sc.next();
 
        //合法性判定
        // 1)srcPath对应的文件是否存在
        File srcFile = new File(srcPath);
        if(!srcFile.isFile()) {
            System.out.println("源文件路径有误");
            return;
        }
 
        //2)destPath不要求对应的文件存在,但是目录得存在.
        File destFile = new File(destPath);
        if(!destFile.getParentFile().isDirectory()) {
            System.out.println("目标路径有误!");
            return;
        }
 
        //复制操作
        try(InputStream inputStream = new FileInputStream(srcFile);
            OutputStream outputStream = new FileOutputStream(destFile)) {
            while(true) {
                byte[] buffer = new byte[1024];
                int n = inputStream.read(buffer);
                if(n == -1) {
                    //读取完毕
                    break;
                }
                //把读到的内容写入到outputStream中
                outputStream.write(buffer, 0, n);
            }
        }
    }
}

查找包含指定字符的文件

import java.io.*;
import java.util.Scanner;
 
public class Project3 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要搜索的路径: ");
        String rootPath = sc.next();
        System.out.println("请输入要查询的词: ");
        String word = sc.next();
 
        File rootFile = new File(rootPath);
        if(!rootFile.isDirectory()) {
            System.out.println("输入的路径不正确");
            return;
        }
 
        scanDir(rootFile, word);
    }
 
    private static void scanDir(File rootFile, String word) {
        File[] files = rootFile.listFiles();
        if(files == null) {
            return;
        }
 
        for(File f : files) {
            System.out.println("当前遍历到: " + f.getAbsolutePath());
            if(f.isFile()) {
                //在文件内容中搜索
                searchInFile(f, word);
            } else if(f.isDirectory()) {
                //递归遍历
                scanDir(f, word);
            } else {
                //这个else暂时不需要
                ;
            }
        }
    }
 
    private static void searchInFile(File f, String word) {
        //通过这个方法在文件内部进行搜索
        //1.把文件内容全部读取出来
        try(InputStream inputStream = new FileInputStream(f)) {
            StringBuilder stringBuilder = new StringBuilder();
            while(true) {
                byte[] buffer = new byte[1024];
                int n = inputStream.read(buffer);
                if(n == -1) {
                    break;
                }
                //此处只是读取出文件的一部分.需要把文件的整体内容拼接到一起
                String s = new String(buffer, 0, n);
                stringBuilder.append(s);
            }
 
            //当文件整体读取完毕,循环结束之后,此时stringBuilder就是包含文件整个内容的字符串了.
            if(stringBuilder.indexOf(word) == -1) {
                //没找到要返回
                return;
            }
            //找到了,打印文件路径
            System.out.println("找到了! " + word + " 存在于 " + f.getAbsolutePath());
        } catch(IOException e) {
            throw new RuntimeException();
        }
    }
}

 

相关文章
|
1月前
|
Java C语言
文件操作与IO(3)
文件操作与IO(3)
|
2月前
|
存储 Unix Java
文件操作和IO(1)
文件操作和IO(1)
43 0
|
3月前
|
存储 Rust 测试技术
【一起学Rust · 项目实战】命令行IO项目minigrep——测试驱动开发完善功能
【一起学Rust · 项目实战】命令行IO项目minigrep——测试驱动开发完善功能
95 0
|
3月前
|
Rust
【一起学Rust · 项目实战】命令行IO项目minigrep——接收命令行参数与读取文件内容
【一起学Rust · 项目实战】命令行IO项目minigrep——接收命令行参数与读取文件内容
54 0
【一起学Rust · 项目实战】命令行IO项目minigrep——接收命令行参数与读取文件内容
|
1月前
|
存储 Java
控制台项目-学生管理系统(io流实现)
控制台项目-学生管理系统(io流实现)
21 0
|
1月前
|
Java
文件操作与IO(2)
文件操作与IO(2)
|
1月前
|
存储 Unix Java
文件操作和IO(1)
文件操作和IO(1)
|
3月前
|
Rust
【一起学Rust · 项目实战】命令行IO项目minigrep——重构优化模块和错误处理
【一起学Rust · 项目实战】命令行IO项目minigrep——重构优化模块和错误处理
40 0
|
4月前
|
存储 缓存 Java
【Java IO流】流的分类,API使用,文件操作
【Java IO流】流的分类,API使用,文件操作
|
4月前
|
Java
Java中的IO(Input/Output)和文件操作
Java中的IO(Input/Output)和文件操作
33 1