文件夹的复制和文件的遍历主要原理是:先遍历源文件夹里面的所有文件和文件夹,并保存到一个文件路径数组中,然后循环这个数组,如果是文件就用FileInputStream和FileOutputStream类来实现复制功能,如果是文件夹,则用递归方法递归遍历里面的文件和文件夹,
主要的实现方法是用File类的API来遍历要操作文件和文件夹,
具体怎么用,我写了一个小测试代码级大家看吧,我再在代码里面写一点注释,告诉大家怎么用就好了
代码如下:
- //
- import java.io.*;
- class FileMove
- {
- public static void main(String[] args)
- {
- try{
- //传入两个文件夹路径,其中在Windows中使用的分隔符是"\\"
- CopyFile("D:\\5555","D:\\1234");
- }
- catch(Exception ex){}
- System.out.println("Copy File is over!");
-
- }
-
- //复制文件夹的方法,开始的时候是两个文件夹
- public static void CopyFile(String source,String destin) throws Exception //在这里直接抛出各种异常,就不一一处理了
- {
- File path1=new File(source);
- File path2=new File(destin);
-
- //如果源目录不存在,那就不用复制了,
- if(path1.exists())
- {
- //Create destination folder,如果目标目录不存在,就创建目标目录,因为没有目录文件复制不过去的
- if(!path2.exists())
- {
- path2.mkdirs();
- }
-
- //取得源目录下面的所有文件和文件夹
- File[] items=path1.listFiles();
- FileInputStream fis=null;
- FileOutputStream fos=null;
-
- //取得所有文件和文件夹之后,遍历处理,如果是文件,就复制文件,如果是文件夹,则递归文件夹下面的文件和文件夹
- for(File item:items)
- {
- //如果是文件才进行复制
- if(item.isFile())
- {
- //输入输出流的两个常用构造函数,其中在用来了一个字段File.separator,先用输入流读取文件,然后用输出流写文件到目标位置,完成复制功能
- fis=new FileInputStream(item);
- fos=new FileOutputStream(path2+File.separator+item.getName());
- byte[] b=new byte[1024];
- for(int i=0;(i=fis.read(b))!=-1;)
- {
- fos.write(b,0,i);
- fos.flush();
- }
-
- //close the Stream关闭资源啊,什么异常处理的就不写,自己补上吧
- fos.close();
- fis.close();
-
- }
- //如果是文件夹,递归文件夹
- else
- {
- CopyFile(item.getPath(),path2+File.separator+item.getName());
- }
- }
- }
- else
- {
- System.out.println("source path:"+source+" is not exists!");
- }
- }
- }
- //
复制代码
当然,为了方便大家看代码理解,异常处理就是能少就少了,大家在实际应用的时候切记写好异常处理代码哦,
|
|