文件操作与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();
        }
    }
}

 

相关文章
|
7月前
|
Java C语言
文件操作与IO(3)
文件操作与IO(3)
|
6月前
|
Linux 网络安全 开发工具
【linux】基础IO |文件操作符
【linux】基础IO |文件操作符
50 0
|
6月前
|
Java
文件操作与IO(3) 文件内容的读写——数据流
文件操作与IO(3) 文件内容的读写——数据流
47 0
|
6月前
|
Java Windows
文件操作和IO(2):Java中操作文件
文件操作和IO(2):Java中操作文件
31 0
|
7月前
|
存储 JSON 安全
Python中的文件操作与文件IO操作
【5月更文挑战第14天】在Python中,文件操作是常见任务,包括读取、写入和处理文件内容。`open()`函数是核心,接受文件路径和模式(如'r'、'w'、'a'、'b'和'+')参数。本文详细讨论了文件操作基础,如读写模式,以及文件IO操作,如读取、写入和移动指针。异常处理是关键,使用`try-except`捕获`FileNotFoundError`和`PermissionError`等异常。进阶技巧涉及`with`语句、`readline()`、`os`和`shutil`模块。数据序列化与反序列化方面,介绍了
|
7月前
|
Unix Linux 开发工具
【探索Linux】P.11(基础IO,文件操作)
【探索Linux】P.11(基础IO,文件操作)
44 0
|
7月前
|
存储 Java
控制台项目-学生管理系统(io流实现)
控制台项目-学生管理系统(io流实现)
83 0
|
7月前
|
Java
文件操作与IO(2)
文件操作与IO(2)
|
7月前
|
存储 Unix Java
文件操作和IO(1)
文件操作和IO(1)
|
4月前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。