JAVA 创建文件及文件夹的复制移动

package com.java.ch151;

import java.io.File;
import java.io.IOException; //引入类

public class TextCreateFileAndDir { // 创建新文件和目录
     public static boolean createFile(String filePath) { // 创建单个文件
          File file = new File(filePath);
          if (file.exists()) { // 判断文件是否存在
               System.out.println("目标文件已存在" + filePath);
               return false;
          }
          if (filePath.endsWith(File.separator)) { // 判断文件是否为目录
               System.out.println("目标文件不能为目录!");
               return false;
          }
          // 判断目标文件所在的目录是否存在
          if (!file.getParentFile().exists()) { 
               // 如果目标文件所在的文件夹不存在,则创建父文件夹
               System.out.println("目标文件所在目录不存在,准备创建它!");
               if (!file.getParentFile().mkdirs()) { // 判断创建目录是否成功
                    System.out.println("创建目标文件所在的目录失败!");
                    return false;
               }
          }
          try {
               if (file.createNewFile()) { // 创建目标文件
                    System.out.println("创建文件成功:" + filePath);
                    return true;
               } else {
                    System.out.println("创建文件失败!");
                    return false;
               }
          } catch (IOException e) { // 捕获异常
               e.printStackTrace();
               System.out.println("创建文件失败!" + e.getMessage());
               return false;
          }
     }

     public static boolean createDir(String destDirName) {// 创建目录
          File dir = new File(destDirName);
          if (dir.exists()) { // 判断目录是否存在
               System.out.println("创建目录失败,目标目录已存在!");
               return false;
          }
          if (!destDirName.endsWith(File.separator)) { // 结尾是否以"/"结束
               destDirName = destDirName + File.separator;
          }
          if (dir.mkdirs()) { // 创建目标目录
               System.out.println("创建目录成功!" + destDirName);
               return true;
          } else {
               System.out.println("创建目录失败!");
               return false;
          }
     }

     public static String createTempFile(String prefix, String suffix,
               String dirName) { // 创建临时文件
          File tempFile = null;
          if (dirName == null) { // 目录如果为空
               try {
                    // 在默认文件夹下创建临时文件
                    tempFile = File.createTempFile(prefix, suffix);
                    return tempFile.getCanonicalPath(); // 返回临时文件的路径
               } catch (IOException e) { // 捕获异常
                    e.printStackTrace();
                    System.out.println("创建临时文件失败:" + e.getMessage());
                    return null;
               }
          } else { // 指定目录存在
               File dir = new File(dirName); // 创建目录
               if (!dir.exists()) { // 如果目录不存在则创建目录
                    if (TextCreateFileAndDir.createDir(dirName)) {
               System.out.println("创建临时文件失败,不能创建临时文件所在的目录!");
                         return null;
                    }
               }
               try {
                    // 在目录下创建临时文件
                    tempFile = File.createTempFile(prefix, suffix, dir);
                    return tempFile.getCanonicalPath(); // 返回临时文件的路径
               } catch (IOException e) { // 捕获异常
                    e.printStackTrace();
                    System.out.println("创建临时文件失败!" + e.getMessage());
                    return null;
               }
          }
     }

     public static void main(String[] args) {           // java程序的主入口处
          String dirName = "E:/createFile/";                // 创建目录
          TextCreateFileAndDir.createDir(dirName);      // 调用方法创建目录
          String fileName = dirName + "/file1.txt";      // 创建文件
          TextCreateFileAndDir.createFile(fileName);      // 调用方法创建文件
          String prefix = "temp";                          // 创建临时文件
          String surfix = ".txt";                          // 后缀
          for (int i = 0; i < 10; i++) {                     // 循环创建多个文件
               System.out.println("创建临时文件: "           // 调用方法创建临时文件
               + TextCreateFileAndDir.createTempFile(prefix, surfix,dirName));
          }
     }
}

以上程序,createFile方法创建一个新的文件。首先通过File的exists方法和isDirectory方法判断目标文件是否存在,对于文件存在,则返回false,新建文件失败。如果目标文件不存在,通过File的getParentFile方法获得目标文件的父目录,如果父目录不存在,调用File的mkdirs方法创建父目录(如果父目录的父目录也不存在,都会一起创建),此时能确定目标文件不存在,而且父目录已经存在,使用File的createNewFile方法便能成功地创建一个新的空文件了。

文件和目录的复制与移动。包括单个文件的移动复制、复制目录到指定目录连同目录下的子目录一起复制、将目录以及目录下的文件和子目录全部复制。具体代码如下:

import java.io.File; //引入类
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

//实现文件的简单处理,复制和移动文件、目录等
public class TextCopyFileAndMove { 
     // 移动指定文件夹内的全部文件
     public static void fileMove(String from, String to) throws Exception {
          try {
               File dir = new File(from);
               File[] files = dir.listFiles();      // 将文件或文件夹放入文件集
               if (files == null)                          // 判断文件集是否为空
                    return;
               File moveDir = new File(to);           // 创建目标目录
               if (!moveDir.exists()) {                // 判断目标目录是否存在
                    moveDir.mkdirs();                     // 不存在则创建
               }
               for (int i = 0; i < files.length; i++) {// 遍历文件集
                    // 如果是文件夹或目录,则递归调用fileMove方法,直到获得目录下的文件
                    if (files[i].isDirectory()) {
                         // 递归移动文件
                         fileMove(files[i].getPath(), to + "\\" + files[i].getName());
                         files[i].delete();                // 删除文件所在原目录
                    }
                    // 将文件目录放入移动后的目录
                    File moveFile = new File(moveDir.getPath() + "\\"
                              + files[i].getName());
                    if (moveFile.exists()) {           // 目标文件夹下存在的话,删除
                         moveFile.delete();
                    }
                    files[i].renameTo(moveFile);     // 移动文件
                    System.out.println(files[i] + " 移动成功");
               }
          } catch (Exception e) {
               throw e;
          }
     }
     // 复制目录下的文件(不包括该目录)到指定目录,会连同子目录一起复制过去。
     public static void copyFileFromDir(String toPath, String fromPath) {
          File file = new File(fromPath);
          createFile(toPath, false);                // true:创建文件 false创建目录
          if (file.isDirectory()) {                     // 如果是目录
               copyFileToDir(toPath, listFile(file));
          }
     }
     // 复制目录到指定目录,将目录以及目录下的文件和子目录全部复制到目标目录
     public static void copyDir(String toPath, String fromPath) {
          File targetFile = new File(toPath);      // 创建文件
          createFile(targetFile, false);                // 创建目录
          File file = new File(fromPath);           // 创建文件
          if (targetFile.isDirectory() && file.isDirectory()) { // 如果传入是目录
               copyFileToDir(targetFile.getAbsolutePath() + "/" + file.getName(),
                         listFile(file));                // 复制文件到指定目录
          }
     }
     // 复制一组文件到指定目录。targetDir是目标目录,filePath是需要复制的文件路径
     public static void copyFileToDir(String toDir, String[] filePath) {
          if (toDir == null || "".equals(toDir)) { // 目录路径为空
               System.out.println("参数错误,目标路径不能为空");
               return;
          }
          File targetFile = new File(toDir);
          if (!targetFile.exists()) {                // 如果指定目录不存在
               targetFile.mkdir();                     // 新建目录
          } else {
               if (!targetFile.isDirectory()) {      // 如果不是目录
                    System.out.println("参数错误,目标路径指向的不是一个目录!");
                    return;
               }
          }
          for (int i = 0; i < filePath.length; i++) { // 遍历需要复制的文件路径
               File file = new File(filePath[i]);      // 创建文件
               if (file.isDirectory()) {                // 判断是否是目录
                    // 递归调用方法获得目录下的文件
                    copyFileToDir(toDir + "/" + file.getName(), listFile(file));
                    System.out.println("复制文件 " + file);
               } else {
                    copyFileToDir(toDir, file, ""); // 文件到指定目录
               }
          }
     }
     // 复制文件到指定目录
     public static void copyFileToDir(String toDir, File file, String newName) {
          String newFile = "";
          if (newName != null && !"".equals(newName)) {
               newFile = toDir + "/" + newName;
          } else {
               newFile = toDir + "/" + file.getName();
          }
          File tFile = new File(newFile);
          copyFile(tFile, file);                          // 调用方法复制文件
     }
     public static void copyFile(File toFile, File fromFile) { // 复制文件
          if (toFile.exists()) {                          // 判断目标目录中文件是否存在
               System.out.println("文件" + toFile.getAbsolutePath() + "已经存在,跳过该文件!");
               return;
          } else {
               createFile(toFile, true);                // 创建文件
          }
          System.out.println("复制文件" + fromFile.getAbsolutePath() + "到"
                    + toFile.getAbsolutePath());
          try {                                              // 创建文件输入流
               InputStream is = new FileInputStream(fromFile);
               FileOutputStream fos = new FileOutputStream(toFile);// 文件输出流
               byte[] buffer = new byte[1024];      // 字节数组
               while (is.read(buffer) != -1) {      // 将文件内容写到文件中
                    fos.write(buffer);
               }
               is.close();                               // 输入流关闭
               fos.close();                               // 输出流关闭
          } catch (FileNotFoundException e) {      // 捕获文件不存在异常
               e.printStackTrace();
          } catch (IOException e) {                     // 捕获异常
               e.printStackTrace();
          }
     }
     public static String[] listFile(File dir) { // 获取文件绝对路径
          String absolutPath = dir.getAbsolutePath(); // 获取传入文件的路径
          String[] paths = dir.list();                // 文件名数组
          String[] files = new String[paths.length]; // 声明字符串数组,长为传入文件的个数
          for (int i = 0; i < paths.length; i++) { // 遍历显示文件绝对路径
               files[i] = absolutPath + "/" + paths[i];
          }
          return files;
     }
     public static void createFile(String path, boolean isFile) {// 创建文件或目录
          createFile(new File(path), isFile);      // 调用方法创建新文件或目录
     }
     public static void createFile(File file, boolean isFile) { // 创建文件
          if (!file.exists()) {                          // 如果文件不存在
               if (!file.getParentFile().exists()) { // 如果文件父目录不存在
                    createFile(file.getParentFile(), false);
               } else {                                    // 存在文件父目录
                    if (isFile) {                          // 创建文件
                         try {
                              file.createNewFile();      // 创建新文件
                         } catch (IOException e) {
                              e.printStackTrace();
                         }
                    } else {
                         file.mkdir();                     // 创建目录
                    }
               }
          }
     }
     public static void main(String[] args) {      // java程序主入口处
          String fromPath = "E:/createFile";           // 目录路径
          String toPath = "F:/createFile";           // 源路径
          System.out.println("1.移动文件:从路径 " + fromPath + " 移动到路径 " + toPath);
          try {
               fileMove(fromPath, toPath);           // 调用方法实现文件的移动
          } catch (Exception e) {
               System.out.println("移动文件出现问题" + e.getMessage());
          }
          System.out.println("2.复制目录 " + toPath + " 下的文件(不包括该目录)到指定目录" + fromPath
                    + " ,会连同子目录一起复制过去。");
          copyFileFromDir(fromPath, toPath);           // 调用方法实现目录复制
          System.out.println("3.复制目录 " + fromPath + "到指定目录 " + toPath
                    + " ,将目录以及目录下的文件和子目录全部复制到目标目录");
          // 调用方法实现目录以用目录下的文件和子目录全部复制
          copyDir(toPath, fromPath);
     }
}

文件和目录的复制与移动。包括单个文件的移动复制、复制目录到指定目录连同目录下的子目录一起复制、将目录以及目录下的文件和子目录全部复制。具体代码如下:

package com.java.ch152;

import java.io.File; //引入类
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

//实现文件的简单处理,复制和移动文件、目录等
public class TextCopyFileAndMove { 
     // 移动指定文件夹内的全部文件
     public static void fileMove(String from, String to) throws Exception {
          try {
               File dir = new File(from);
               File[] files = dir.listFiles();      // 将文件或文件夹放入文件集
               if (files == null)                          // 判断文件集是否为空
                    return;
               File moveDir = new File(to);           // 创建目标目录
               if (!moveDir.exists()) {                // 判断目标目录是否存在
                    moveDir.mkdirs();                     // 不存在则创建
               }
               for (int i = 0; i < files.length; i++) {// 遍历文件集
                    // 如果是文件夹或目录,则递归调用fileMove方法,直到获得目录下的文件
                    if (files[i].isDirectory()) {
                         // 递归移动文件
                         fileMove(files[i].getPath(), to + "\\" + files[i].getName());
                         files[i].delete();                // 删除文件所在原目录
                    }
                    // 将文件目录放入移动后的目录
                    File moveFile = new File(moveDir.getPath() + "\\"
                              + files[i].getName());
                    if (moveFile.exists()) {           // 目标文件夹下存在的话,删除
                         moveFile.delete();
                    }
                    files[i].renameTo(moveFile);     // 移动文件
                    System.out.println(files[i] + " 移动成功");
               }
          } catch (Exception e) {
               throw e;
          }
     }
     // 复制目录下的文件(不包括该目录)到指定目录,会连同子目录一起复制过去。
     public static void copyFileFromDir(String toPath, String fromPath) {
          File file = new File(fromPath);
          createFile(toPath, false);                // true:创建文件 false创建目录
          if (file.isDirectory()) {                     // 如果是目录
               copyFileToDir(toPath, listFile(file));
          }
     }
     // 复制目录到指定目录,将目录以及目录下的文件和子目录全部复制到目标目录
     public static void copyDir(String toPath, String fromPath) {
          File targetFile = new File(toPath);      // 创建文件
          createFile(targetFile, false);                // 创建目录
          File file = new File(fromPath);           // 创建文件
          if (targetFile.isDirectory() && file.isDirectory()) { // 如果传入是目录
               copyFileToDir(targetFile.getAbsolutePath() + "/" + file.getName(),
                         listFile(file));                // 复制文件到指定目录
          }
     }
     // 复制一组文件到指定目录。targetDir是目标目录,filePath是需要复制的文件路径
     public static void copyFileToDir(String toDir, String[] filePath) {
          if (toDir == null || "".equals(toDir)) { // 目录路径为空
               System.out.println("参数错误,目标路径不能为空");
               return;
          }
          File targetFile = new File(toDir);
          if (!targetFile.exists()) {                // 如果指定目录不存在
               targetFile.mkdir();                     // 新建目录
          } else {
               if (!targetFile.isDirectory()) {      // 如果不是目录
                    System.out.println("参数错误,目标路径指向的不是一个目录!");
                    return;
               }
          }
          for (int i = 0; i < filePath.length; i++) { // 遍历需要复制的文件路径
               File file = new File(filePath[i]);      // 创建文件
               if (file.isDirectory()) {                // 判断是否是目录
                    // 递归调用方法获得目录下的文件
                    copyFileToDir(toDir + "/" + file.getName(), listFile(file));
                    System.out.println("复制文件 " + file);
               } else {
                    copyFileToDir(toDir, file, ""); // 文件到指定目录
               }
          }
     }
     // 复制文件到指定目录
     public static void copyFileToDir(String toDir, File file, String newName) {
          String newFile = "";
          if (newName != null && !"".equals(newName)) {
               newFile = toDir + "/" + newName;
          } else {
               newFile = toDir + "/" + file.getName();
          }
          File tFile = new File(newFile);
          copyFile(tFile, file);                          // 调用方法复制文件
     }
     public static void copyFile(File toFile, File fromFile) { // 复制文件
          if (toFile.exists()) {                          // 判断目标目录中文件是否存在
               System.out.println("文件" + toFile.getAbsolutePath() + "已经存在,跳过该文件!");
               return;
          } else {
               createFile(toFile, true);                // 创建文件
          }
          System.out.println("复制文件" + fromFile.getAbsolutePath() + "到"
                    + toFile.getAbsolutePath());
          try {                                              // 创建文件输入流
               InputStream is = new FileInputStream(fromFile);
               FileOutputStream fos = new FileOutputStream(toFile);// 文件输出流
               byte[] buffer = new byte[1024];      // 字节数组
               while (is.read(buffer) != -1) {      // 将文件内容写到文件中
                    fos.write(buffer);
               }
               is.close();                               // 输入流关闭
               fos.close();                               // 输出流关闭
          } catch (FileNotFoundException e) {      // 捕获文件不存在异常
               e.printStackTrace();
          } catch (IOException e) {                     // 捕获异常
               e.printStackTrace();
          }
     }
     public static String[] listFile(File dir) { // 获取文件绝对路径
          String absolutPath = dir.getAbsolutePath(); // 获取传入文件的路径
          String[] paths = dir.list();                // 文件名数组
          String[] files = new String[paths.length]; // 声明字符串数组,长为传入文件的个数
          for (int i = 0; i < paths.length; i++) { // 遍历显示文件绝对路径
               files[i] = absolutPath + "/" + paths[i];
          }
          return files;
     }
     public static void createFile(String path, boolean isFile) {// 创建文件或目录
          createFile(new File(path), isFile);      // 调用方法创建新文件或目录
     }
     public static void createFile(File file, boolean isFile) { // 创建文件
          if (!file.exists()) {                          // 如果文件不存在
               if (!file.getParentFile().exists()) { // 如果文件父目录不存在
                    createFile(file.getParentFile(), false);
               } else {                                    // 存在文件父目录
                    if (isFile) {                          // 创建文件
                         try {
                              file.createNewFile();      // 创建新文件
                         } catch (IOException e) {
                              e.printStackTrace();
                         }
                    } else {
                         file.mkdir();                     // 创建目录
                    }
               }
          }
     }
     public static void main(String[] args) {      // java程序主入口处
          String fromPath = "E:/createFile";           // 目录路径
          String toPath = "F:/createFile";           // 源路径
          System.out.println("1.移动文件:从路径 " + fromPath + " 移动到路径 " + toPath);
          try {
               fileMove(fromPath, toPath);           // 调用方法实现文件的移动
          } catch (Exception e) {
               System.out.println("移动文件出现问题" + e.getMessage());
          }
          System.out.println("2.复制目录 " + toPath + " 下的文件(不包括该目录)到指定目录" + fromPath
                    + " ,会连同子目录一起复制过去。");
          copyFileFromDir(fromPath, toPath);           // 调用方法实现目录复制
          System.out.println("3.复制目录 " + fromPath + "到指定目录 " + toPath
                    + " ,将目录以及目录下的文件和子目录全部复制到目标目录");
          // 调用方法实现目录以用目录下的文件和子目录全部复制
          copyDir(toPath, fromPath);
     }
}

以上程序中,TextCopyFileAndMove类的fileMove()方法移动指定文件夹内的全部文件。根据传入的路径创建文件目录,根据listFiles()方法获得目录中的文件与子文件夹。创建目标目录并判断目标是否存在。利用循环将目录中的文件移动到指定的目录,如果循环得到的是文件夹运用递归获得该文件夹中的文件,再删除文件所在的原目录,将获得的文件放入指定的目录。如果目标文件夹存在则删除该文件夹。将获得的文件根据renameTo()方法移动到指定的文件夹。
copyFileFromDir()方法复制目录下的文件到指定的目录,会连同子目录一起复制过去,其中不包括该目录。根据指定目录创建文件对象,调用createFile()方法创建文件对象,由于传递的第二个参数为false则是创建目录,如果参数为true,则是创建文件。根据目标路径创建文件对象。如果创建的都是目录时,则调用copyFileToDir()方法将指定目录中的文件复制到目标目录中。
copyFileToDir()方法复制一组文件到指定目录。判断指定目录是否为空,如果为空则返回。根据目标路径创建文件对象,如果该文件对象不存在,则新建该目录对象,否则判断文件对象是否是目录,如果不是目录则返回。运用循环遍历需要复制的文件路径,根据路径创建相应的文件对象,如果该文件对象是目录,则调用copyFileDir()方法通过listFile()方法获得目录中的文件并将文件复制到指定目录中,如果是文件则直接将文件复制到目录中。
copyFile()方法是复制文件到指定的目录中。File类的exists()方法判断指定文件是否存在,如果存在则返回,否则调用createFile()方法创建文件。根据传入的目标文件创建输入流,再根据流对象创建文件输出流,创建字节数组用来存储流读取的数据。根据读取的数据不为空进行循环,利用文件输出流的write()方法将目标文件的内容写入到指定文件中,读取完毕后释放相关的流资源。

listFile()方法获得指定目录下的文件,并将文件的绝对路径放入字符串数组中返回。文件对象list()方法是获得目录中的文件,运用循环将目录中的文件的绝对路径放字符串数组中返回。
createFile()方法判断文件是否存在,如果不存在则判断该文件的上级目录是否存在,如果不存在则调用createFile()方法创建该目录,否则判断上级目录是否是文件,如果是文件则创建新文件否则创建目录。
运行结果如下所示。
1.移动文件:从路径 E:/createFile 移动到路径 F:/createFile
E:\createFile\file1.txt 移动成功
E:\createFile\temp1\file1.txt 移动成功
E:\createFile\temp1 移动成功
E:\createFile\temp26661.txt 移动成功
E:\createFile\temp26662.txt 移动成功
……
2.复制目录 F:/createFile 下的文件(不包括该目录)到指定目录E:/createFile ,会连同子目录一起复制过去。
复制文件F:\createFile\createFile\file1.txt到E:\createFile\createFile\file1.txt
复制文件F:\createFile\createFile\temp1\file1.txt到E:\createFile\createFile\temp1\file1.txt
复制文件 F:\createFile\createFile\temp1
复制文件F:\createFile\createFile\temp26661.txt到E:\createFile\createFile\temp26661.txt
……
3.复制目录 E:/createFile到指定目录 F:/createFile ,将目录以及目录下的文件和子目录全部复制到目标目录
复制文件E:\createFile\createFile\file1.txt到F:\createFile\createFile\createFile\file1.txt
复制文件 E:\createFile\createFile\temp1
复制文件 E:\createFile\createFile
文件F:\createFile\createFile\file1.txt已经存在,跳过该文件!
文件F:\createFile\createFile\temp1\file1.txt已经存在,跳过该文件!
文件F:\createFile\createFile\temp26661.txt已经存在,跳过该文件!
……

发布了18 篇原创文章 · 获赞 16 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_44569012/article/details/90707966