Java模拟文件管理器

简介: Java模拟文件管理器

个人推荐:

📢📢📢 前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下 "通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。 点击跳转到教程

在这里插入图片描述

一:项目结构

在这里插入图片描述

二:项目分析

在这里插入图片描述

三:代码详情

FileUtils类

package example17;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.OutputStreamWriter;
import java.nio.file.Files;
import java.util.ArrayList;

/*
 * 文件工具类
 */
public  class FileUtils {
    /*
     * 指定关键字检索文件
     * @param file  File对象
     * @param key  关键字
     * @return 包含关键字的文件路径
     */
      public static ArrayList<String>  listFiles(File file,final String key) {
          //创建过滤器对象
          FilenameFilter filter=new FilenameFilter() {
            //如果文件名包含关键字返回true,否则返回false
            @Override
            public boolean accept(File dir, String name) {
                // TODO Auto-generated method stub
                File currFile=new File(dir,name);
                if (currFile.isFile()&&name.contains(key)) {
                    return true;
                }
                return false;
            }
        };
        //递归方式获取规定的路径
        ArrayList<String>arrayList=fileDir(file,filter);
        return arrayList;
      }

    /*
     * 递归方式获取规定的路径
     * @param dir  file对象
     * @param filter  过滤器
     * @return 过滤器过滤后的文件路径
     */
    private static ArrayList<String> fileDir(File dir, FilenameFilter filter) {
        // TODO Auto-generated method stub
        ArrayList<String>arrayList=new ArrayList<>();
        //获取过滤后的所有文件
        File[] lists=dir.listFiles(filter);
        for(File list:lists){
            //将文件的绝对路径放到集合中
            arrayList.add(list.getAbsolutePath());
        }
        //获取当前目录下所有的文件数组
        File[]files=dir.listFiles();
        //遍历所有的子目录和文件
        for(File file:files){
            if (file.isDirectory()) {
                //如果是目录,递归调用fileDir
                ArrayList<String>every=fileDir(file, filter);
                //将文件夹下的文件路径添加到集合
                arrayList.addAll(every);
            }
        }
        //此时的集合中当前目录下的文件路径,和当前目录的子目录下的文件路径
        return arrayList;
    }
    
    /*
     * 指定后缀名检索文件
     * @param file  File对象
     * @param suffixArray 后缀名数组
     * @return 指定后缀的文件路径
     */
    public static ArrayList<String>listFiles(File file,final String[] suffixArray){
        //创建过滤器对象
        FilenameFilter filter=new FilenameFilter() {    
            @Override
            public boolean accept(File dir, String name) {
                // TODO Auto-generated method stub
                File currFile=new File(dir,name);
                //如果文件名以指定后缀名结尾返回true,否则返回false
                if (currFile.isFile()) {
                    for(String suffix:suffixArray){
                        if (name.endsWith("."+suffix)) {
                            return true;
                        }
                    }
                    
                }
                return false;
            }
        };
        //递归方式获取规定的路径
        ArrayList<String>arrayList=fileDir(file, filter);
        return arrayList;
    }
    
    
    /*
     * 复制文件/目录
     * @param srcFile 源目录
     * @param destFile 目标文件
     */
    public static void copySrcPathToDesPath(File srcDir,File destDir)
            throws Exception{
        File[]files=srcDir.listFiles();//子文件目录
        for(int i=0;i<files.length;i++){
            //创建指定目录的文件
            File copiedFile=new File(destDir,files[i].getName());
            //如果是目录
            if (files[i].isDirectory()) {
                //创建文件夹
                if (!copiedFile.mkdirs()) {
                    System.out.println("无法创建:"+copiedFile);
                    return;
                }
                //调用递归,获取子文件夹下的文件路径
                copySrcPathToDesPath(files[i],copiedFile);
            }else {
                //复制文件
                FileInputStream input=new FileInputStream(files[i]);//获取输入流
                FileOutputStream out=new FileOutputStream(copiedFile);//获取输出流
                byte[]buffer=new byte[1024];//创建缓冲区
                int n=0;
                //循环读取字节
                while ((n=input.read(buffer))!=-1) {
                    out.write(buffer,0,n);
                }
                //关闭输入流
                input.close();
                //关闭输出流
                 out.close();
            }
        }
    }
}

DocumentManager类

package example17;
import java.io.File;
import java.util.ArrayList;
import java.util.Scanner;
import projectActualCombat.FileUtil;
/*
 * 模拟文件管理器
 */
public class DocumentManager {
            public static void main(String[] args) throws Exception {
                Scanner sc=new Scanner(System.in);
                System.out.println("1:指定关键字检索文件;2:指定后缀名检索文件;3:复制文件/目录;4:退出");
                while (true) {
                    System.out.println("请输入指令:");
                    int command=sc.nextInt();
                    switch (command) {
                    case 1:
                        searchByKeyWord();//指定关键字检索文件
                        break;
                    case 2:
                        searchBySuffix();//指定后缀名检索文件
                         break;
                    case 3:
                        copyDirectory();//复制文件/目录
                         break;
                    case 4:
                         exit_OBJ();//退出系统
                         break;
                    default:
                        System.out.println("你输入的指令有误");
                        break;
                    }
                }
            }

            /*
             * 退出
             */
            private static void exit_OBJ() {
                // TODO Auto-generated method stub
                System.out.println("你已退出系统,谢谢使用!");
                System.exit(0);
            }

            /*
             * 复制文件/目录
             */
            private static void copyDirectory() throws Exception {
                // TODO Auto-generated method stub
                Scanner sc=new Scanner(System.in);
                System.out.println("请输入源目录:");
                String srcDirectory=sc.next();//从控制台获取源路径
                File srcFile=new File(srcDirectory);
                //判断目录是否存在,是否是目录
                if (!srcFile.exists()||!srcFile.isDirectory()) {
                    System.out.println("无效目录!");
                    return;
                }
                System.out.println("请输入目标位置:");
                String destDirectory=sc.next();//从控制台获取路径
                File destFile=new File(destDirectory);
                if (!destFile.exists()||!destFile.isDirectory()) {
                    //判断目录是否存在,是否是目录
                    System.out.println("无效位置!");
                    return;
                }
                //将源路径中的内容复制到目录路径下
                FileUtils.copySrcPathToDesPath(srcFile, destFile);
            }

            /*
             * 指定后缀名检索文件
             */
            private static void searchBySuffix() {
                // TODO Auto-generated method stub
                Scanner scan=new Scanner(System.in);
                System.out.println("请输入要检索的目录位置");
                String path=scan.next();
                File file=new File(path);
                //判断目录是否存在,是否是目录
                if (!file.exists()||!file.isDirectory()) {
                    System.out.println("不是有效目录");
                    return;
                }
                System.out.println("请输入搜索后缀:");
                String suffix=scan.next();//获取后缀字符串
                //在输入目录下获取所有指定后缀名的文件路径
                ArrayList<String>list=FileUtils.listFiles(file, suffix);
                for(Object obj:list){
                    //将路径打印到控制台
                    System.out.println(obj);
                }
            }

            /*
             * 指定关键字检索文件
             */
            private static void searchByKeyWord() {
                // TODO Auto-generated method stub
                Scanner sc=new Scanner(System.in);
                System.out.println("请输入要检索的目录位置:");
                String path=sc.next();
                File file=new File(path);
                //判断文件是否存在,是否是目录
                if (!file.exists()||!file.isDirectory()) {
                    System.out.println("不是有效目录");
                    return;
                }
                
                System.out.println("请输入搜索关键字:");
                String key=sc.next();//获取关键字
                //在输入目录下获取所有包含关键字的路径
                ArrayList<String>list=FileUtils.listFiles(file, key);
                for(Object obj:list){
                    //将路径打印到控制台
                    System.out.println(obj);
                }
            }
}

四:运行效果

【指定关键字检索文件】:
在这里插入图片描述
【指定后缀名检索文件】:
在这里插入图片描述

【复制文件/目录】:
在这里插入图片描述
在这里插入图片描述
【退出】:
在这里插入图片描述

相关文章
|
3天前
|
存储 Java 数据安全/隐私保护
Java的文件管理系统都有什么?
Java的文件管理系统都有什么?
23 2
|
17天前
|
Rust Java 文件存储
Java系统中的错误码设计问题之通过properties文件管理Error Code如何解决
Java系统中的错误码设计问题之通过properties文件管理Error Code如何解决
29 1
|
3月前
|
Java API 数据处理
Java文件操作,让你成为文件管理的王者!读写、复制、删除不在话下!
【6月更文挑战第27天】在Java编程中,掌握文件操作至关重要。使用java.io包的File和流类,可以轻松实现文件读写、复制和删除。
27 0
|
3月前
|
Java
Java 程序设计 第七章 文件管理与输入/输出 笔记
Java 程序设计 第七章 文件管理与输入/输出 笔记
|
4月前
|
Java
Java面向对象课程设计项目__文件管理器
Java面向对象课程设计项目__文件管理器
57 0
|
网络协议 NoSQL Java
模拟面试一(Java)
模拟面试一(Java)
148 1
模拟面试一(Java)
|
存储 Java 索引
不可上位!数据结构队列,老实排队,Java实现数组模拟队列及可复用环形队列
不可上位!数据结构队列,老实排队,Java实现数组模拟队列及可复用环形队列
138 0
不可上位!数据结构队列,老实排队,Java实现数组模拟队列及可复用环形队列
|
存储 设计模式 Java
【Java作业】模拟停车场(超详细!)
【Java作业】模拟停车场(超详细!)
【Java作业】模拟停车场(超详细!)
|
存储 Java 程序员
Java 模拟二级文件系统 中
本系列将记述使用 Java 实现一个简单的二级文件系统的过程。本项目意图效仿 Linux 的文件管理,但是学的又没那么像,仅仅是一些皮毛。因此使用类似 Inode 的东西记录文件在磁盘上的信息。
209 1
|
存储 Java 人机交互
Java 模拟二级文件系统 上
本系列将记述使用 Java 实现一个简单的二级文件系统的过程。
151 1