


Implémentation Java d'exemples de copie de fichiers, de coupe de fichiers et de suppression
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; /** * Java实现文件复制、剪切、删除操作 * 文件指文件或文件夹 * 文件分割符统一用"\\" */ public class FileOperateDemo { /** * 复制文件或文件夹 * @param srcPath 源文件或源文件夹的路径 * @param destDir 目标文件所在的目录 * @return */ public static boolean copyGeneralFile(String srcPath, String destDir) { boolean flag = false; File file = new File(srcPath); if(!file.exists()) { // 源文件或源文件夹不存在 return false; } if(file.isFile()) { // 文件复制 flag = copyFile(srcPath, destDir); } else if(file.isDirectory()) { // 文件夹复制 flag = copyDirectory(srcPath, destDir); } return flag; } /** * 默认的复制文件方法,默认会覆盖目标文件夹下的同名文件 * @param srcPath * 源文件绝对路径 * @param destDir * 目标文件所在目录 * @return boolean */ public static boolean copyFile(String srcPath, String destDir) { return copyFile(srcPath, destDir, true/**overwriteExistFile*/); // 默认覆盖同名文件 } /** * 默认的复制文件夹方法,默认会覆盖目标文件夹下的同名文件夹 * @param srcPath 源文件夹路径 * @param destPath 目标文件夹所在目录 * @return boolean */ public static boolean copyDirectory(String srcPath, String destDir) { return copyDirectory(srcPath, destDir, true/**overwriteExistDir*/); } /** * 复制文件到目标目录 * @param srcPath * 源文件绝对路径 * @param destDir * 目标文件所在目录 * @param overwriteExistFile * 是否覆盖目标目录下的同名文件 * @return boolean */ public static boolean copyFile(String srcPath, String destDir, boolean overwriteExistFile) { boolean flag = false; File srcFile = new File(srcPath); if (!srcFile.exists() || !srcFile.isFile()) { // 源文件不存在 return false; } //获取待复制文件的文件名 String fileName = srcFile.getName(); String destPath = destDir + File.separator +fileName; File destFile = new File(destPath); if (destFile.getAbsolutePath().equals(srcFile.getAbsolutePath())) { // 源文件路径和目标文件路径重复 return false; } if(destFile.exists() && !overwriteExistFile) { // 目标目录下已有同名文件且不允许覆盖 return false; } File destFileDir = new File(destDir); if(!destFileDir.exists() && !destFileDir.mkdirs()) { // 目录不存在并且创建目录失败直接返回 return false; } try { FileInputStream fis = new FileInputStream(srcPath); FileOutputStream fos = new FileOutputStream(destFile); byte[] buf = new byte[1024]; int c; while ((c = fis.read(buf)) != -1) { fos.write(buf, 0, c); } fos.flush(); fis.close(); fos.close(); flag = true; } catch (IOException e) { e.printStackTrace(); } return flag; } /** * * @param srcPath 源文件夹路径 * @param destPath 目标文件夹所在目录 * @return */ public static boolean copyDirectory(String srcPath, String destDir, boolean overwriteExistDir) { if(destDir.contains(srcPath)) return false; boolean flag = false; File srcFile = new File(srcPath); if (!srcFile.exists() || !srcFile.isDirectory()) { // 源文件夹不存在 return false; } //获得待复制的文件夹的名字,比如待复制的文件夹为"E:\\dir\\"则获取的名字为"dir" String dirName = srcFile.getName(); //目标文件夹的完整路径 String destDirPath = destDir + File.separator + dirName + File.separator; File destDirFile = new File(destDirPath); if(destDirFile.getAbsolutePath().equals(srcFile.getAbsolutePath())) { return false; } if(destDirFile.exists() && destDirFile.isDirectory() && !overwriteExistDir) { // 目标位置有一个同名文件夹且不允许覆盖同名文件夹,则直接返回false return false; } if(!destDirFile.exists() && !destDirFile.mkdirs()) { // 如果目标目录不存在并且创建目录失败 return false; } File[] fileList = srcFile.listFiles(); //获取源文件夹下的子文件和子文件夹 if(fileList.length==0) { // 如果源文件夹为空目录则直接设置flag为true,这一步非常隐蔽,debug了很久 flag = true; } else { for(File temp: fileList) { if(temp.isFile()) { // 文件 flag = copyFile(temp.getAbsolutePath(), destDirPath, overwriteExistDir); // 递归复制时也继承覆盖属性 } else if(temp.isDirectory()) { // 文件夹 flag = copyDirectory(temp.getAbsolutePath(), destDirPath, overwriteExistDir); // 递归复制时也继承覆盖属性 } if(!flag) { break; } } } return flag; } /** * 删除文件或文件夹 * @param path * 待删除的文件的绝对路径 * @return boolean */ public static boolean deleteFile(String path) { boolean flag = false; File file = new File(path); if (!file.exists()) { // 文件不存在直接返回 return flag; } flag = file.delete(); return flag; } /** * 由上面方法延伸出剪切方法:复制+删除 * @param destDir 同上 */ public static boolean cutGeneralFile(String srcPath, String destDir) { boolean flag = false; if(copyGeneralFile(srcPath, destDir) && deleteFile(srcPath)) { // 复制和删除都成功 flag = true; } return flag; } public static void main(String[] args) { /** 测试复制文件 */ System.out.println(copyGeneralFile("d://test/test.html", "d://test/test/")); // 一般正常场景 System.out.println(copyGeneralFile("d://notexistfile", "d://test/")); // 复制不存在的文件或文件夹 System.out.println(copyGeneralFile("d://test/test.html", "d://test/")); // 待复制文件与目标文件在同一目录下 System.out.println(copyGeneralFile("d://test/test.html", "d://test/test/")); // 覆盖目标目录下的同名文件 System.out.println(copyFile("d://test/", "d://test2", false)); // 不覆盖目标目录下的同名文件 System.out.println(copyGeneralFile("d://test/test.html", "notexist://noexistdir/")); // 复制文件到一个不可能存在也不可能创建的目录下 System.out.println("---------"); /** 测试复制文件夹 */ System.out.println(copyGeneralFile("d://test/", "d://test2/")); System.out.println("---------"); /** 测试删除文件 */ System.out.println(deleteFile("d://a/")); } }
更多java实现文件复制、剪切文件和删除示例相关文章请关注PHP中文网!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Lorsque vous utilisez MyBatis-Plus ou d'autres cadres ORM pour les opérations de base de données, il est souvent nécessaire de construire des conditions de requête en fonction du nom d'attribut de la classe d'entité. Si vous manuellement à chaque fois ...

Le traitement de la cartographie des champs dans l'amarrage du système rencontre souvent un problème difficile lors de l'exécution d'amarrage du système: comment cartographier efficacement les champs d'interface du système a ...

Commencez le printemps à l'aide de la version IntelliJideaultimate ...

Dépannage et solutions au logiciel de sécurité de l'entreprise qui fait que certaines applications ne fonctionnent pas correctement. De nombreuses entreprises déploieront des logiciels de sécurité afin d'assurer la sécurité des réseaux internes. ...

Conversion des objets et des tableaux Java: Discussion approfondie des risques et des méthodes correctes de la conversion de type de distribution De nombreux débutants Java rencontreront la conversion d'un objet en un tableau ...

Analyse du phénomène de fuite de mémoire des programmes Java sur différents processeurs d'architecture. Cet article discutera d'un cas où un programme Java présente différents comportements de mémoire sur les processeurs ARM et architecture x86 ...

Comment convertir les noms en nombres pour implémenter le tri au sein des groupes? Lors du tri des utilisateurs en groupes, il est souvent nécessaire de convertir le nom de l'utilisateur en numéros afin qu'il puisse être différent ...

Solutions pour convertir les noms en nombres pour implémenter le tri dans de nombreux scénarios d'applications, les utilisateurs peuvent avoir besoin de trier en groupe, en particulier en un ...
