Java实现1.指定关键字搜索 2.指定后缀名搜索 3.文件/文件夹复制

简介: Java实现1.指定关键字搜索 2.指定后缀名搜索 3.文件/文件夹复制
package JAVA做一个文件管理器;
import java.io.*;
import java.util.Scanner;
public class FileUtils {
    public static void main(String[] args) throws IOException {
        /** * 复制文件夹或文件夹 */
        // 源文件夹
        String url1 = "f:/photos";
        // 目标文件夹
        String url2 = "d:/tempPhotos";
            // 创建目标文件夹
            (new File(url2)).mkdirs();
            // 获取源文件夹当前下的文件或目录
            File[] file = (new File(url1)).listFiles();
            for (int i = 0; i < file.length; i++) {
                if (file[i].isFile()) {
                    // 复制文件
                    copyFile(file[i],new File(url2+file[i].getName()));
                }
                if (file[i].isDirectory()) {
                    // 复制目录
                    String sourceDir=url1+File.separator+file[i].getName();
                    String targetDir=url2+File.separator+file[i].getName();
                    copyDirectiory(sourceDir, targetDir);
                }
            }
        //输出语句(显示操作菜单)
       System.out.println("**********1.指定关键字搜索 2.指定后缀名搜索 3.文件/文件夹复制   4.退出***********************");
        System.out.println("请输入对应的操作");
        //创建一个键盘扫描器
        Scanner sc = new Scanner(System.in);
        //接收用户的输入整数
        int key = sc.nextInt();
        //根据用户判断是哪一操作
        //在等值比较的时候,优先考虑switch..case,但使用switch的时候一定要注意
        //int char String 枚举
        //byte short int char String 枚举
        switch (key){
            case 1:
                //TODO 根据关键字搜索文件
                searchByKeyWorld();
                break;
            case 2:
                //TODO  根据指定的后缀名搜索文件
                searchByLastWord();
                break;
            case 3:
                //TODO  文件/文件夹的复制
                break;
            case 4:
                //退出
                System.exit(0);//中止
                break;
            default:
                System.out.println("操作错误,请输入正确指令");
                break;
        }
    }
    private static void searchByLastWord() {
//提醒用户输入需要搜索的目录
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入需要检索的目录:");
        //再提醒用户输入需要搜索的后缀
        String path = sc.nextLine();
        System.out.println("请输入要检索的后缀");
        String key = sc.nextLine();
        File file = new File(path);
        //通过用户指定的目录去搜索后缀
        listSuffix(file,key);
        //告诉用户是否搜索到文件
        System.out.println("搜完了!");
    }
    private static void listSuffix(File file, String key) {
        //获取当前目录所有File对象
        File[] files = file.listFiles();
        //把每一个file对象拿出来判断,首先判断是目录还是文件,
        //如果是目录则继续搜索,文件则判断是否包含关键字
        for (File file2 :files) {//JDK1.8新推出集合流式Api处理 集合Lambda表达式效果更佳
            //判断元素是否是后缀
            String exegc ="^"+key+"$";
            if (file2.isDirectory()){
                listFile(file2,key);
            }else {
                if (file2.getName().endsWith(exegc)){
                    System.out.println(file2.getAbsolutePath());
                }
            }
        }
    }
    private static void searchByKeyWorld() {
        //提醒用户输入需要搜索的目录
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入需要检索的目录:");
        //再提醒用户输入需要搜索的关键字
        String path = sc.nextLine();
        System.out.println("请输入要检索的关键字");
        String key = sc.nextLine();
        File file = new File(path);
        //通过用户指定的目录去搜索指定关键字
        listFile(file,key);
        //告诉用户是否搜索到文件
        System.out.println("搜完了!");
    }
    //具体搜索关键字的方法
    private static void listFile(File file, String key) {
        //获取当前目录所有File对象
        File[] files = file.listFiles();
        //把每一个file对象拿出来判断,首先判断是目录还是文件,
        //如果是目录则继续搜索,文件则判断是否包含关键字
        for (File file2 :files) {//JDK1.8新推出集合流式Api处理 集合Lambda表达式效果更佳
            //判断元素是否是目录
            if (file2.isDirectory()){
                listFile(file2,key);
            }else {
                if (file2.getName().contains(key)){
                    System.out.println(file2.getAbsolutePath());
                }
            }
        }
    }
        // 复制文件
        public static void copyFile(File sourceFile,File targetFile) throws IOException{
            // 新建文件输入流并对它进行缓冲
            FileInputStream input = new FileInputStream(sourceFile);
            BufferedInputStream inBuff=new BufferedInputStream(input);
            // 新建文件输出流并对它进行缓冲
            FileOutputStream output = new FileOutputStream(targetFile);
            BufferedOutputStream outBuff=new BufferedOutputStream(output);
            // 缓冲数组
            byte[] b = new byte[1024 * 5];
            int len;
            while ((len =inBuff.read(b)) != -1) {
                outBuff.write(b, 0, len);
            }
            // 刷新此缓冲的输出流
            outBuff.flush();
            //关闭流
            inBuff.close();
            outBuff.close();
            output.close();
            input.close();
        }
        // 复制文件夹
        public static void copyDirectiory(String sourceDir, String targetDir) throws IOException {
            // 新建目标目录
            (new File(targetDir)).mkdirs();
            // 获取源文件夹当前下的文件或目录
            File[] file = (new File(sourceDir)).listFiles();
            for (int i = 0; i < file.length; i++) {
                if (file[i].isFile()) {
                    // 源文件
                    File sourceFile=file[i];
                    // 目标文件
                    File targetFile=new File(new File(targetDir).getAbsolutePath() +File.separator+file[i].getName());
                    copyFile(sourceFile,targetFile);
                }
                if (file[i].isDirectory()) {
                    // 准备复制的源文件夹
                    String dir1=sourceDir + "/" + file[i].getName();
                    // 准备复制的目标文件夹
                    String dir2=targetDir + "/"+ file[i].getName();
                    copyDirectiory(dir1, dir2);
                }
            }
        }
    }

 


目录
相关文章
|
11天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
39 2
|
14天前
|
存储 缓存 安全
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见。本文介绍了使用 `File.createTempFile` 方法和自定义创建临时文件的两种方式,详细探讨了它们的使用场景和注意事项,包括数据缓存、文件上传下载和日志记录等。强调了清理临时文件、确保文件名唯一性和合理设置文件权限的重要性。
37 2
|
23天前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
|
24天前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
34 4
|
27天前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
|
27天前
|
Java API Maven
如何使用 Java 字节码工具检查类文件的完整性
本文介绍如何利用Java字节码工具来检测类文件的完整性和有效性,确保类文件未被篡改或损坏,适用于开发和维护阶段的代码质量控制。
|
29天前
|
缓存 Java 程序员
Java|SpringBoot 项目开发时,让 FreeMarker 文件编辑后自动更新
在开发过程中,FreeMarker 文件编辑后,每次都需要重启应用才能看到效果,效率非常低下。通过一些配置后,可以让它们免重启自动更新。
26 0
|
5月前
|
缓存 安全 Java
《volatile使用与学习总结:》多层面分析学习java关键字--volatile
《volatile使用与学习总结:》多层面分析学习java关键字--volatile
32 0
|
6月前
|
安全 Java 编译器
Java多线程基础-6:线程安全问题及解决措施,synchronized关键字与volatile关键字(一)
线程安全问题是多线程编程中最典型的一类问题之一。如果多线程环境下代码运行的结果是符合我们预期的,即该结果正是在单线程环境中应该出现的结果,则说这个程序是线程安全的。 通俗来说,线程不安全指的就是某一代码在多线程环境下执行会出现bug,而在单线程环境下执行就不会。线程安全问题本质上是由于线程之间的调度顺序的不确定性,正是这样的不确定性,给我们的代码带来了很多“变数”。 本文将对Java多线程编程中,线程安全问题展开详细的讲解。
102 0
|
6月前
|
存储 安全 Java
【亮剑】Java并发编程涉及`ThreadLocal`、`Volatile`、`Synchronized`和`Atomic`四个关键机制
【4月更文挑战第30天】Java并发编程涉及`ThreadLocal`、`Volatile`、`Synchronized`和`Atomic`四个关键机制。`ThreadLocal`为每个线程提供独立变量副本;`Volatile`确保变量可见性,但不保证原子性;`Synchronized`实现同步锁,保证单线程执行;`Atomic`类利用CAS实现无锁并发控制。理解其原理有助于编写高效线程安全代码。根据业务场景选择合适机制至关重要。
45 0
下一篇
无影云桌面