如果我想把某个文件夹下的所有文件复制到目标文件夹,该怎么做?今天刚学的InputStream和OutputStream,我写的代码只能复制到一个文件里,于是复制的文件全部覆盖了,如果只创建文件夹又拒绝访问。我今天忘记带U盘了,所以没代码贴出来……

解决方案 »

  1.   

    创建源文件夹File对象,获取其所属的全部文件数组 File[]针对每个File创建os,在目标文件夹中创建is循环
      

  2.   

    给你个列出所有文件名的类吧,调用执行getNameList()返回一个list
    然后你就去遍历执行copyimport java.io.File;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List; public class FileView{
        private List nameList = new ArrayList();
        public void getSubFile(String parent,String type) throws NullPointerException
        {
            File parentF = new File(parent);
            if(parentF.isFile())
            {

    //if((parent.lastIndexOf(type)+3)==parent.length()){
       nameList.add(parent);
    //  return;
    //}
    return;
            }
    if(parentF.isDirectory()){
     String[] subFiles = parentF.list();
     for (int i = 0; i < subFiles.length; i++)
      {
          getSubFile(parentF.getAbsolutePath() + System.getProperty("file.separator") + subFiles[i],type);
      }
    }
        }
         public List getNameList()
         {
            return nameList;
          }
         public static List getNames(String dirName,String type) throws NullPointerException
        {        File srcDir = new File(dirName);
            if(!srcDir.exists())
            {
                System.out.println("Dir not exists!");
    return new ArrayList();
            }
            FileView x = new FileView();
            x.getSubFile(dirName,type);
    return x.getNameList();    }
    }
    至于你说的覆盖问题,我理解为不是追加内容,你可以看下api,有个文件构造器是使用append的,追加true就行了
      

  3.   

    1,如果你的源文件夹中包含了文本文件和子文件夹,而子文件夹中还有子文件夹,那么你先要用递归把源文件夹下的所有文件列出。
    2,如果考虑的是最简单的情况,也就是你的源文件夹下只有要复制的文件,没有子文件夹,这个比较容易做了。
    给个参考代码import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    public class FolderTest {
    public static void main(String[] args){
    File f=new File("d:/source");//source为源文件夹
    FileInputStream fis=null;
    FileOutputStream fos=null;
    BufferedReader br=null;
    BufferedWriter bw=null;
    if(f.isDirectory()){
    File[] files=f.listFiles();
    for(int i=0;i<files.length;i++){
    try {
    fis=new FileInputStream(files[i].getAbsoluteFile());//以源文件中的文件的绝对路径创建fis
    fos=new FileOutputStream("d:/target/"+files[i].getName());//目标文件夹,目标文件夹中的文件名和源相同
    br=new BufferedReader(new InputStreamReader(fis));
    bw=new BufferedWriter(new OutputStreamWriter(fos));
    String line;
    while((line=br.readLine())!=null){
    bw.write(line);
    }
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    } finally{
    try {
    br.close();
    bw.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    }
    else{
    System.out.println("这不是一个文件夹!!");
    }
    }
    }