这里呢,我使用的方法是这样的,先列出当前文件下的所有文件,在遍历这些文件,如果是文件夹,那么创建一个文件夹,并递归遍历该文件,如果是文件,那直接复制就OK了。
下面看例子:
import java.io.*;
/*
* 复制文件或文件夹
* */
public class Text {
public static void main(String[] args) throws Exception
{
File file = new File("C:\\新建文件夹"); //源文件或文件夹
File file2 = new File("C:\\新建文件夹_2"); //目标文件
method(file,file2); //复制
}
//复制文件或文件夹
public static void method(File file,File file2) throws Exception
{
if(!file.exists()) //如果所复制的文件或文件夹不存在
{
System.out.println("所复制文件源不存在");
return;
}
if(file.isFile()) //如果是一个文件
{
copyfile(file.getAbsolutePath(),
file.getParent()+File.separator+"复制文件__"+file.getName());
return;
}
if(file.isDirectory()) //如果是一个文件夹
{
file2.mkdir(); //建立对应的文件夹
}
File[] files = file.listFiles(); //返回当前文件夹下的所有文件及文件目录
for(int i=0;i<files.length;i++)
{
if(files[i].isDirectory()) //如果是文件夹
{
copyfiles(files[i].getAbsoluteFile(),file2.getAbsoluteFile()); //进行文件夹的复制
}
else //进行文件的复制
{
copyfile(files[i].getAbsoluteFile(),file2.getAbsolutePath()+File.separator+files[i].getName());
}
}
}
/*
* 复制文件
* String in 源文件
* String out 目标文件
* */
public static void copyfile(File infile,String outfile) throws Exception
{
FileInputStream fis = new FileInputStream(infile); //源文件
FileOutputStream fos = new FileOutputStream(new File(outfile)); //目标文件
byte[] by = new byte[1024];
int len;
while((len=fis.read(by))!=-1)
{
fos.write(by);
}
fis.close();
fos.close();
}
/*
* 复制文件夹
* File in 源文件夹
* File out 目标文件夹
*/
public static void copyfiles(File in,File out) throws Exception
{
if(!in.isDirectory())
System.out.println("所复制的不是一个文件夹");
else
{
String fileName = in.getName();
out = new File(out+File.separator+fileName);
out.mkdir();
}
File[] files = in.listFiles();
for(int i=0;i<files.length;i++)
{
if(files[i].isDirectory())
{
copyfiles(files[i].getAbsoluteFile(),out.getAbsoluteFile());
}
else
copyfile(files[i].getAbsolutePath(),out.getAbsolutePath()+File.separator+files[i].getName());
}
}
}
如果是使用下面这种方式来找出相关的文件时
File [ ] file = file2.listFiles(new FileFilter() {
public boolean accept(File pathname) {
return pathname.getName().endsWith(".java");
}
});
这个只是返回当前文件夹下的,如果使用到了递归文件夹,这个方法好像进不了子文件夹。