您的位置:首页 > 编程语言 > Java开发

java复制文件或文件夹

2012-08-03 16:43 267 查看
import java.io.*;

/**

* @author Toby 复制文件夹或文件夹

*/

public class FileUtil {

public static void main(String args[]) throws IOException {

// 源文件夹

String url1 = "D:/user/test/";

// 目标文件夹

String url2 = "D:/user/testcopy/";

// 创建目标文件夹

(new File(url2)).mkdirs();

// 获取源文件夹当前下的文件或目录

File[] file = (new File(url1)).listFiles();

for (int i = 0; i < file.length; i++) {

if (file[i].isFile()) {

// 复制文件

String type = file[i].getName().substring(file[i].getName().lastIndexOf(".") + 1);

if (type.equalsIgnoreCase("txt"))// 转码处理

copyFile(file[i], new File(url2 + file[i].getName()), MTOServerConstants.CODE_UTF_8, MTOServerConstants.CODE_GBK);

else

copyFile(file[i], new File(url2 + file[i].getName()));

}

if (file[i].isDirectory()) {

// 复制目录

String sourceDir = url1 + File.separator + file[i].getName();

String targetDir = url2 + File.separator + file[i].getName();

copyDirectiory(sourceDir, targetDir);

}

}

}

// 复制文件

public static void copyFile(File sourceFile, File targetFile) throws IOException {

BufferedInputStream inBuff = null;

BufferedOutputStream outBuff = null;

try {

// 新建文件输入流并对它进行缓冲

inBuff = new BufferedInputStream(new FileInputStream(sourceFile));

// 新建文件输出流并对它进行缓冲

outBuff = new BufferedOutputStream(new FileOutputStream(targetFile));

// 缓冲数组

byte[] b = new byte[1024 * 5];

int len;

while ((len = inBuff.read(b)) != -1) {

outBuff.write(b, 0, len);

}

// 刷新此缓冲的输出流

outBuff.flush();

} finally {

// 关闭流

if (inBuff != null)

inBuff.close();

if (outBuff != null)

outBuff.close();

}

}

// 复制文件夹

public static void copyDirectiory(String sourceDir, String targetDir) throws IOException {

// 新建目标目录

(new File(targetDir)).mkdirs();

// 获取源文件夹当前下的文件或目录

File[] file = (new File(sourceDir)).listFiles();

for (int i = 0; i < file.length; i++) {

if (file[i].isFile()) {

// 源文件

File sourceFile = file[i];

// 目标文件

File targetFile = new File(new File(targetDir).getAbsolutePath() + File.separator + file[i].getName());

copyFile(sourceFile, targetFile);

}

if (file[i].isDirectory()) {

// 准备复制的源文件夹

String dir1 = sourceDir + "/" + file[i].getName();

// 准备复制的目标文件夹

String dir2 = targetDir + "/" + file[i].getName();

copyDirectiory(dir1, dir2);

}

}

}

/**

*

* @param srcFileName

* @param destFileName

* @param srcCoding

* @param destCoding

* @throws IOException

*/

public static void copyFile(File srcFileName, File destFileName, String srcCoding, String destCoding) throws IOException {// 把文件转换为GBK文件

BufferedReader br = null;

BufferedWriter bw = null;

try {

br = new BufferedReader(new InputStreamReader(new FileInputStream(srcFileName), srcCoding));

bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(destFileName), destCoding));

char[] cbuf = new char[1024 * 5];

int len = cbuf.length;

int off = 0;

int ret = 0;

while ((ret = br.read(cbuf, off, len)) > 0) {

off += ret;

len -= ret;

}

bw.write(cbuf, 0, off);

bw.flush();

} finally {

if (br != null)

br.close();

if (bw != null)

bw.close();

}

}

/**

*

* @param filepath

* @throws IOException

*/

public static void del(String filepath) throws IOException {

File f = new File(filepath);// 定义文件路径

if (f.exists() && f.isDirectory()) {// 判断是文件还是目录

if (f.listFiles().length == 0) {// 若目录下没有文件则直接删除

f.delete();

} else {// 若有则把文件放进数组,并判断是否有下级目录

File delFile[] = f.listFiles();

int i = f.listFiles().length;

for (int j = 0; j < i; j++) {

if (delFile[j].isDirectory()) {

del(delFile[j].getAbsolutePath());// 递归调用del方法并取得子目录路径

}

delFile[j].delete();// 删除文件

}

}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: