java将指定目录下文件复制到目标文件夹的几种小方法
作者:泽泽泽json
在Java中有多种方法可以实现文件的复制,这篇文章主要给大家介绍了关于java将指定目录下文件复制到目标文件夹的几种小方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
技术介绍
1. 递归
- 递归是一种基于函数调用自身的方法。它是一种非常常见的计算机编程技术,可以让程序员通过简单、优雅的方式来解决许多问题。
- 简单来说,递归是在函数执行过程中调用自身的过程。当函数被调用时,它会先执行函数体内的语句,然后再调用自己,这个过程将会重复执行数次,直到达到某个条件才会终止递归调用。
- 在编程中,递归可以使一些问题的解决方法变得清晰、简洁。比如树的遍历、图的搜索以及处理嵌套数据结构等,都可以通过递归来实现。
- 需要注意的是,如果递归没有正确的终止条件,它将会一直调用自身,直到程序崩溃。因此,在编写递归函数时,必须要特别注意控制递归的深度。
2. File
- Java中的File是一个类,它代表着本地文件系统中的文件或目录。 File类可以用于对文件(或目录)的创建、删除、重命名、查询和修改等操作。可以通过调用File类的方法实现这些操作。File类也提供了一些便捷的方法来获取文件的属性,如文件大小、最后修改时间、是否可读、是否可写等属性。File类的一些常见方法包括:
- createNewFile() - 创建一个新文件。
- delete() - 删除一个文件。
- exists() - 检查文件是否存在。
- isFile() - 检查文件是否是一个标准文件。
- isDirectory() - 检查文件是否是一个目录。
- renameTo(newName) - 重命名文件/目录。
- 另外,File类还提供了一些静态方法,如list()、listFiles()等,用于列出指定目录下的文件和子目录。而对于文本文件的读取和写入操作,则需要使用Java流(InputStream和OutputStream)来处理。
实现
首先介绍下几个小方法
1. 获取文件名
public static String getFileSimpleName(File file){ return file.getName().replaceAll("[\\\\/]", ""); }
2. 获取文件的后缀
public static String getFileType(File file) { String fileName = file.getName(); int dotIndex = fileName.lastIndexOf("."); return (dotIndex == -1) ? "" : fileName.substring(dotIndex + 1); }
3. 拷贝文件到目标文件夹
public static void copy(File sourceFile, String destinationFolder) throws IOException { String destinationFilePath = destinationFolder + "/" + getFileSimpleName(sourceFile); File file = new File(destinationFilePath); if (file.exists()){ file.delete(); } Files.copy(sourceFile.toPath(), file.toPath()); }
4.递归查询文件
public static void copyFilesRecursion(File sourceDir,String destDir,String...names) throws IOException { // 遍历源文件夹下的所有文件和文件夹 for (File file : sourceDir.listFiles()) { if (file.isDirectory()) { // 如果是文件夹,递归调用 copyImages 函数 copyFilesRecursion(file, destDir,names); } else if (isMateFile(file,names)) { // 如果是图片文件,拷贝到目标文件夹中 copy(file,destDir); } } }
完整代码
import java.io.File; import java.io.IOException; import java.nio.file.FileSystemException; import java.nio.file.Files;; import java.util.Arrays; /** * @author zzxjs * @since 2023/06/27 */ public class FileCopy { /** * 拷贝指定文件到目标文件夹 * @param isRecursion 是否遍历子文件夹 * @param source 源文件夹 * @param target 目标文件夹 * @param mateSuffixs 匹配的文件后缀,如果为空,只要不是文件夹都复制 */ public static void copyFile(boolean isRecursion,String source,String target,String...mateSuffixs) throws Exception { File sourceFile; if (!(sourceFile = file(source)).isDirectory()){ throw new FileSystemException("source not directory"); } File targetFile = file(target); //文件夹如果不存在则创建,存在则判断是否是目录 if (targetFile.exists()){ if (!targetFile.isDirectory()){ throw new FileSystemException("target not directory"); } }else{ targetFile.mkdirs(); } if (isRecursion){ copyFilesRecursion(sourceFile,target,mateSuffixs); }else { copyFiles(sourceFile,target,mateSuffixs); } } /** * 创建一个File * @param path 路径 */ public static File file(String path){ return new File(path); } /** * 递归查询文件 * @param sourceDir 源文件 * @param destDir 目标文件夹 * @param names 匹配的后缀名 */ public static void copyFilesRecursion(File sourceDir,String destDir,String...names) throws IOException { // 遍历源文件夹下的所有文件和文件夹 for (File file : sourceDir.listFiles()) { if (file.isDirectory()) { // 如果是文件夹,递归调用 copyImages 函数 copyFilesRecursion(file, destDir,names); } else if (isMateFile(file,names)) { // 如果是图片文件,拷贝到目标文件夹中 copy(file,destDir); } } } /** * 非递归查询文件 * @param sourceDir 源文件 * @param destDir 目标文件夹 * @param names 匹配的后缀名 */ public static void copyFiles(File sourceDir,String destDir,String...names) throws IOException { // 遍历源文件夹下的所有文件和文件夹 for (File file : sourceDir.listFiles()) { if (file.isFile() && isMateFile(sourceDir,names)) { copy(file,destDir); } } } /** * 拷贝文件到目标文件夹 */ public static void copy(File sourceFile, String destinationFolder) throws IOException { String destinationFilePath = destinationFolder + "/" + getFileSimpleName(sourceFile); File file = new File(destinationFilePath); if (file.exists()){ file.delete(); } Files.copy(sourceFile.toPath(), file.toPath()); } /** * 判断文件名是否匹配 * @param file 文件 * @param names 需要匹配的后缀 png、doc、ppt * @return 如果没有填,则是文件就复制 */ public static boolean isMateFile(File file,String...names) { if (names == null || names.length == 0){ return true; } return Arrays.asList(names).contains(getFileType(file).toLowerCase()); } /** * 获取文件的后缀 * @param file 文件 Z:\jiayi\postpartum\images\doduo.zip * @return zip */ public static String getFileType(File file) { String fileName = file.getName(); int dotIndex = fileName.lastIndexOf("."); return (dotIndex == -1) ? "" : fileName.substring(dotIndex + 1); } /** * 获取文件名 * @param file Z:\jiayi\postpartum\images\doduo.zip * @return doudou.zip */ public static String getFileSimpleName(File file){ return file.getName().replaceAll("[\\\\/]", ""); } }
总结
到此这篇关于java将指定目录下文件复制到目标文件夹的文章就介绍到这了,更多相关java指定文件复制到目标文件夹内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!