文件夹的复制--递归算法
2016-12-28 17:09
399 查看
在Java中,要想实现文件夹的复制,采用的是IO技术。通常对我们来说,要想实现一个文件的复制,是十分简单的。那文件夹的复呢?我们只需要从中间价格递归算法即可。
要求是:将test文件夹的所有内容都复制到test1文件夹下,且要求test文件夹中的结构不变,如/test/a/b.doc文件在test1文件下的目录应该是/test1/test/a/b.doc.
具体的代码实现如下
package com.tiantang.io;
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;
public class TestFileStream {
public static void main(String[] args) {
String srcPath="F:\\test";
File src=new File(srcPath);
String destPath="F:\\test1";
File dest=new File(destPath);
copyDir(src, dest);
}
public static void copyDir(File src, File dest) {
if(src.isDirectory()){
File temp=new File(dest,src.getName());
temp.mkdirs();
for (File file : src.listFiles()) {
copyDir(file, temp);
}
}else{
copyFile(src, new File(dest,src.getName()));
}
}
/**
* 拷贝文件
*
* @param src
* @param dest
*/
public static void copyFile(File src, File dest) {
InputStream in = null;
OutputStream out = null;
try {
in = new FileInputStream(src);
out = new FileOutputStream(dest);
byte[] b = new byte[1024];
int len = 0;
while (-1 != (len = in.read(b))) {
out.write(b, 0, len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
要想实现文件夹的复制,就得用到递归,剩下的就是文件的复制了。思路:当要复制文件夹时,我们用listFiles()方法得到文件夹的所有File,然后在遍历所有的File对象,再判断他们是文件夹还是文件....。
要求是:将test文件夹的所有内容都复制到test1文件夹下,且要求test文件夹中的结构不变,如/test/a/b.doc文件在test1文件下的目录应该是/test1/test/a/b.doc.
具体的代码实现如下
package com.tiantang.io;
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;
public class TestFileStream {
public static void main(String[] args) {
String srcPath="F:\\test";
File src=new File(srcPath);
String destPath="F:\\test1";
File dest=new File(destPath);
copyDir(src, dest);
}
public static void copyDir(File src, File dest) {
if(src.isDirectory()){
File temp=new File(dest,src.getName());
temp.mkdirs();
for (File file : src.listFiles()) {
copyDir(file, temp);
}
}else{
copyFile(src, new File(dest,src.getName()));
}
}
/**
* 拷贝文件
*
* @param src
* @param dest
*/
public static void copyFile(File src, File dest) {
InputStream in = null;
OutputStream out = null;
try {
in = new FileInputStream(src);
out = new FileOutputStream(dest);
byte[] b = new byte[1024];
int len = 0;
while (-1 != (len = in.read(b))) {
out.write(b, 0, len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
要想实现文件夹的复制,就得用到递归,剩下的就是文件的复制了。思路:当要复制文件夹时,我们用listFiles()方法得到文件夹的所有File,然后在遍历所有的File对象,再判断他们是文件夹还是文件....。
相关文章推荐
- 修复《文件夹的复制--递归算法》博客中的BUG
- C++实现文件夹复制
- [原创]安卓复制assets目录下的文件及文件夹(1)
- Python文件夹复制
- 传智播客:复制多级文件夹
- 复制文件到指定的文件夹
- 学习笔记-java实现复制、移动、删除文件夹
- 递归复制文件夹
- linux下文件夹的创建、复制、剪切、重命名、清空和删除命令
- Java:复制文件夹及子文件
- linux 创建usr/java 并复制文件到这个文件夹
- C#.NET实现文件夹的复制
- linux下文件夹的创建、复制、剪切、重命名、清空和删除命令
- C#查找所有文件名和文件夹名递归算法的实现
- MFC 运用CFileFind 类 递归实现文件夹的 复制 (MFC 文件操作 二)
- 文件夹的删除、重命名、移动、复制
- vbs复制文件夹的实现代码
- php -- 文件操作类(文件或文件夹的:创建、删除、复制、移动)
- C# winform文件夹操作复制和删除
- 复制文件夹下所有文件