java移动文件小工具

描述一下需求,某某保密单位,我们用的电脑是有密级的,会定期检查,对文件名和文件内容有一定的要求,检查时如果文件不符合规定存储,会有相应处罚,所以大家想把文件转移到光盘里,检查过后在恢复回去,所以写了这么一个小工具,后期会出一个Idea打包jar的教程,可以把程序打包成jar。
 
简单说一下思路,把文件移动到一下指定的目录(文件夹),根据所有检索的目录内部的文件结构一一复制,然后在删除文件,这里注意,如果目录下还有目录,这样就使用递归。
 不多说,直接上代码:

package org.test.file;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

/**
 * 移动文件,到一个目录下。
 *
 * @author Administrator
 * @version 1.0
 * @date 2021/12/6 20:33
 */
public class FileMVInfo {
    //文件格式
    private static String[] suffixArr = {".doc", ".docx", ".xls", ".xlsx", ".pdf", ".ppt", ".pptx", ".txt", ".wps"};
    //中间集合
    private static List<String> suffixList = new ArrayList<>();
    //移动到目录下
    private static String pathMv = "";

    public static void main(String[] args) {

        //指定目录下
        String path = "";
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入指定目录(需要检索的目录):");
        String inPath = scanner.next();
        if (null == inPath || inPath.equals("")) {
            System.out.println("您没有输入指定目录,程序退出。");
            System.exit(0);
        } else {
            path = inPath;
        }

        System.out.println("请输入将文件移动到的目录:");
        String mvPath = scanner.next();
        if (null == mvPath || mvPath.equals("")) {
            System.out.println("您没有输入将文件移动到的目录,程序退出。");
            System.exit(0);
        } else {
            pathMv = mvPath;
        }

        System.out.println("您要一一确认还是全陪删除源文件?一一确认,输入:1,全部删除源文件,输入2");

        String inIsAll = scanner.next();
        suffixList = Arrays.asList(suffixArr);

        if (inIsAll.equals("1")) {
            getFileList(path, 1);
            System.out.println("程序完成,程序退出。");
        } else if (inIsAll.equals("2")) {
            getFileList(path, 2);
            System.out.println("程序完成,程序退出。");
        } else {
            System.out.println("输入错误,程序退出。");
            System.exit(0);
        }
    }

    public static void getFileList(String strPath, int operation) {
        File dir = new File(strPath);
        //获取目录下所有文件和目录
        File[] files = dir.listFiles();
        if (files != null) {
            for (int i = 0; i < files.length; i++) {
                //如果是目录(文件夹),再次递归
                //判断是目录还是文件
                if (files[i].isDirectory()) {
                    //这里注意,需要检索的目录下,不能包含移动到的目录
//                    if(!files[i].getAbsolutePath().equals(pathMv)){
//                        getFileList(files[i].getAbsolutePath(), operation);
//                    }
                    getFileList(files[i].getAbsolutePath(), operation);
                } else { //文件处理
                    //获取文件后缀
                    File file = files[i];
                    String fileName = file.getName();
                    if (fileName.lastIndexOf(".") == -1) {
                        break;
                    }
                    String fileSuffix = fileName.substring(fileName.lastIndexOf("."));
                    //判断后缀是否在数组中
                    if (suffixList.contains(fileSuffix.trim().toLowerCase())) {
                        //在移动到目录下创建相同的目录结构,然后将文件移动到创建的目录
                        //获取目录
                        /*
                         *  这说明一下,是为了,windows下考虑,“D:”这种格式。
                         */
                        String fileDir = pathMv + "/" + file.getParent().replace(":", "盘");

                        //判断目录是否存在
                        File folder = new File(fileDir);
                        if (!folder.exists() && !folder.isDirectory()) {
                            if (folder.mkdirs()) {
                                System.out.println("创建目录:" + fileDir);
                            }
                        }

                        //将文件复制到相应的目录
                        try {
                            File mvFile = new File(fileDir + "/" + fileName);
                            mvFile.createNewFile();
                            FileInputStream inputStream = new FileInputStream(file);
                            FileOutputStream outputStream = new FileOutputStream(mvFile);
                            byte[] data = new byte[1024];
                            int ii = 0;
                            while ((ii = inputStream.read(data)) > 0) {
                                outputStream.write(data);
                            }
                            inputStream.close();
                            outputStream.close();

                            System.out.println("-----------------------------------------");
                            System.out.println("文件已经复制完成,文件名:" + fileName);
                            System.out.println("源文件所在位置:" + file.getAbsolutePath());

                            //1为一一确认操作
                            if (operation == 1) {
                                Scanner scanner = new Scanner(System.in);
                                System.out.println("确认删除吗?删除输入d,保留请输入s:");

                                String str = scanner.next();
                                if (str.equals("d")) {
                                    delFile(file);
                                } else {
                                    System.out.println("您保留了文件:" + fileName);
                                }
                            } else {
                                //全部删除
                                delFile(file);
                            }

                        } catch (Exception ex) {
                            ex.printStackTrace();
                        }

                    }//if
                }//else

            }//for
        }

    }

    /**
     * 删除文件
     *
     * @param file
     */
    private static void delFile(File file) {
        //判断文件是否存在
        if (file.isFile() && file.exists()) {
            if (file.delete()) {
                System.out.println(file.getName() + ",删除成功!");
            } else {
                System.out.println(file.getName() + ",删除失败,需要注意!!!");
            }
        }
    }
}

 测试:

 

 

posted @ 2021-12-07 15:47  田园码民  阅读(122)  评论(0)    收藏  举报