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() + ",删除失败,需要注意!!!"); } } } }
测试:


浙公网安备 33010602011771号