Java文件夾複製

public static boolean copyFile(String srcFileName, String destFileName,boolean overlay); 
public static boolean copyDirectory(String srcDirName, String destDirName,boolean overlay) ; 
其中: 
srcFileName 待複製的文件名 
descFileName  目標文件名 
overlay  如果目標文件存在,是否覆蓋 

如果複製成功返回true,否則返回false 。

代碼如下

 import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;


import javax.swing.JOptionPane;


/**
 * 複製文件或文件夾
 * 
 * zww
 */
public class CopyFileUtil {


private static String MESSAGE = "";


/**
* 複製單個文件

* @param srcFileName
*            待複製的文件名
* @param descFileName
*            目標文件名
* @param overlay
*            如果目標文件存在,是否覆蓋
* @return 如果複製成功返回true,否則返回false
*/
public static boolean copyFile(String srcFileName, String destFileName,
boolean overlay) {
File srcFile = new File(srcFileName);


// 判斷源文件是否存在
if (!srcFile.exists()) {
MESSAGE = "源文件:" + srcFileName + "不存在!";
JOptionPane.showMessageDialog(null, MESSAGE);
return false;
} else if (!srcFile.isFile()) {
MESSAGE = "複製文件失敗,源文件:" + srcFileName + "不是一個文件!";
JOptionPane.showMessageDialog(null, MESSAGE);
return false;
}


// 判斷目標文件是否存在
File destFile = new File(destFileName);
if (destFile.exists()) {
// 如果目標文件存在並允許覆蓋
if (overlay) {
// 刪除已經存在的目標文件,無論目標文件是目錄還是單個文件
new File(destFileName).delete();
}
} else {
// 如果目標文件所在目錄不存在,則創建目錄
if (!destFile.getParentFile().exists()) {
// 目標文件所在目錄不存在
if (!destFile.getParentFile().mkdirs()) {
// 複製文件失敗:創建目標文件所在目錄失敗
return false;
}
}
}


// 複製文件
int byteread = 0; // 讀取的字節數
InputStream in = null;
OutputStream out = null;


try {
in = new FileInputStream(srcFile);
out = new FileOutputStream(destFile);
byte[] buffer = new byte[1024];


while ((byteread = in.read(buffer)) != -1) {
out.write(buffer, 0, byteread);
}
return true;
} catch (FileNotFoundException e) {
return false;
} catch (IOException e) {
return false;
} finally {
try {
if (out != null)
out.close();
if (in != null)
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}


/**
* 複製整個目錄的內容

* @param srcDirName
*            待複製目錄的目錄名
* @param destDirName
*            目標目錄名
* @param overlay
*            如果目標目錄存在,是否覆蓋
* @return 如果複製成功返回true,否則返回false
*/
public static boolean copyDirectory(String srcDirName, String destDirName,
boolean overlay) {
// 判斷源目錄是否存在
File srcDir = new File(srcDirName);
if (!srcDir.exists()) {
MESSAGE = "複製目錄失敗:源目錄" + srcDirName + "不存在!";
JOptionPane.showMessageDialog(null, MESSAGE);
return false;
} else if (!srcDir.isDirectory()) {
MESSAGE = "複製目錄失敗:" + srcDirName + "不是目錄!";
JOptionPane.showMessageDialog(null, MESSAGE);
return false;
}


// 如果目標目錄名不是以文件分隔符結尾,則加上文件分隔符
if (!destDirName.endsWith(File.separator)) {
destDirName = destDirName + File.separator;
}
File destDir = new File(destDirName);
// 如果目標文件夾存在
if (destDir.exists()) {
// 如果允許覆蓋則刪除已存在的目標目錄
if (overlay) {
new File(destDirName).delete();
} else {
MESSAGE = "複製目錄失敗:目的目錄" + destDirName + "已存在!";
JOptionPane.showMessageDialog(null, MESSAGE);
return false;
}
} else {
// 創建目的目錄
System.out.println("目的目錄不存在,準備創建。。。");
if (!destDir.mkdirs()) {
System.out.println("複製目錄失敗:創建目的目錄失敗!");
return false;
}
}


boolean flag = true;
File[] files = srcDir.listFiles();
for (int i = 0; i < files.length; i++) {
// 複製文件
if (files[i].isFile()) {
flag = CopyFileUtil.copyFile(files[i].getAbsolutePath(),
destDirName + files[i].getName(), overlay);
if (!flag)
break;
} else if (files[i].isDirectory()) {
flag = CopyFileUtil.copyDirectory(files[i].getAbsolutePath(),
destDirName + files[i].getName(), overlay);
if (!flag)
break;
}
}
if (!flag) {
MESSAGE = "複製目錄" + srcDirName + "至" + destDirName + "失敗!";
JOptionPane.showMessageDialog(null, MESSAGE);
return false;
} else {
return true;
}
}


public static void main(String[] args) {
String srcDirName = "C:/test/test0/test1";
String destDirName = "c:/ttt";
CopyFileUtil.copyDirectory(srcDirName, destDirName, true);
}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章