实现文件夹或文件的复制

 

这里呢,我使用的方法是这样的,先列出当前文件下的所有文件,在遍历这些文件,如果是文件夹,那么创建一个文件夹,并递归遍历该文件,如果是文件,那直接复制就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");
          }  
  });

 这个只是返回当前文件夹下的,如果使用到了递归文件夹,这个方法好像进不了子文件夹。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值