/**  
     * 复制整个文件夹内容  
     *   
     * @param oldPath  
     *            String 原文件路径 如:c:/fqf  
     * @param newPath  
     *            String 复制后路径 如:f:/fqf/ff  
     * @return boolean  
     */ 
    public static void copyFolder(String oldPath, String newPath) {  
        try {  
            (new File(newPath)).mkdirs(); // 如果文件夹不存在 则建立新文件夹  
            File a = new File(oldPath);  
            String[] file = a.list();  
            File temp = null;  
            for (int i = 0; i < file.length; i++) {  
                if (oldPath.endsWith(File.separator)) {  
                    temp = new File(oldPath + file[i]);  
                } else {  
                    temp = new File(oldPath + File.separator + file[i]);  
                }  
 
                if (temp.isFile()) {  
                    FileInputStream input = new FileInputStream(temp);  
                    FileOutputStream output = new FileOutputStream(newPath  
                            + "/ " + (temp.getName()).toString());  
                    byte[] b = new byte[1024 * 5];  
                    int len;  
                    while ((len = input.read(b)) != -1) {  
                        output.write(b, 0, len);  
                    }  
                    output.flush();  
                    output.close();  
                    input.close();  
                }  
                if (temp.isDirectory()) {// 如果是子文件夹  
                    copyFolder(oldPath + "/ " + file[i], newPath + "/ " 
                            + file[i]);  
                }  
            }  
        } catch (Exception e) {  
            System.out.println("复制整个文件夹内容操作出错 ");  
            e.printStackTrace();  
        }  
    } 
网上找的,请问是不是把里面的"/"全部改成File.separator比较合适呢?

解决方案 »

  1.   

    如果你只是在windows下的话就不用了
      

  2.   

    流请在finally中关闭...复制过程中出现异常...很可能导致异常未关闭,文件一直被占用。
    路径采用File.separator,拥有更高的系统兼容性。(在linux和win系统中‘/’无问题)    /**
         * 拷贝文件(夹)
         * 
         * @param srcFile
         *            源文件(夹)
         * @param dstFile
         *            目标文件(夹)
         * @throws IOException
         *             IOException
         */
        public static void copyFile(File srcFile, File dstFile)
            throws IOException
        {
            // 文件夹则拷贝文件内的东西
            if (srcFile.isDirectory())
            {
                dstFile.mkdirs();
                
                for (File f : srcFile.listFiles())
                {
                    copyFile(f, new File(dstFile.getAbsolutePath() + File.separator + f.getName()));
                }
            }
            else
            {
                copyStream(srcFile, dstFile);
            }
        }
        private static void copyStream(File srcFile, File dstFile)
            throws IOException
        {
            FileInputStream in = null;
            try
            {
                in = new FileInputStream(srcFile);
                FileOutputStream out = null;
                try
                {
                    out = new FileOutputStream(dstFile);
                    byte[] buffer = new byte[BUFFER_SIZE];
                    int len = -1;
                    while ((len = in.read(buffer)) != -1)
                    {
                        out.write(buffer, 0, len);
                        out.flush();
                    }
                }
                finally
                {
                    if (out != null)
                    {
                        out.close();
                        out = null;
                    }
                }
            }
            finally
            {
                if (in != null)
                {
                    in.close();
                    in = null;
                }
            }
        }
      

  3.   


        private static final int BUFFER_SIZE = 4096;    /**
         * 拷贝文件(夹)
         * 
         * @param srcPath
         *            源文件(夹)路径
         * @param dstPath
         *            目标文件(夹)路径
         * @throws IOException
         *             IOException
         */
        public static void copyFile(String srcPath, String dstPath)
            throws IOException
        {
            copyFile(new File(srcPath), new File(dstPath));
        }