A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 将臣 于 2013-4-13 08:25 编辑

功能是复制指定路径下所有文件到另一个文件夹!这是方法,问题就是 每一次 复制的都是 第一个文件 只遍历了一个文件 而不是所有的文件!
public static void copyAndRenameFiles(File[] sourceFiles,String targetFilePath,String originalSuffix,String targetSuffix){          File targetFile = new File(targetFilePath);  
        FileWriter fw = null;  
        FileReader fr = null;  
        if(!targetFile.isDirectory()){  
            targetFile.mkdir();  
        }  
        try {  
            for(File file:sourceFiles){  
                fw = new FileWriter(targetFilePath+"\\"+file.getName().replaceAll(originalSuffix, targetSuffix));  
                int len=0;  
                char[] cbuf=new char[(int)file.length()];  
                fr = new FileReader(file);  
                while((len=fr.read(cbuf))!=-1){  
                    fw.write(cbuf,0,len);  
                }  

            }  
            fw.close();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }     
    }  


评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

5 个回复

倒序浏览
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class CopyDirectoryAndFile {
        public static void main(String[] args) throws IOException {
                String path = "C:/a";
                String copyPath = "C:/b";
                copy(path, copyPath);
        }

        public static void copy(String path, String copyPath) throws IOException {
                File filePath = new File(path);
                DataInputStream read;
                DataOutputStream write;
                if (filePath.isDirectory()) {
                        File[] list = filePath.listFiles();
                        for (int i = 0; i < list.length; i++) {
                                String newPath = path + File.separator + list[i].getName();
                                String newCopyPath = copyPath + File.separator
                                                + list[i].getName();
                                File newFile = new File(copyPath);
                                if (!newFile.exists()) {
                                        newFile.mkdir();
                                }
                                copy(newPath, newCopyPath);
                        }
                } else if (filePath.isFile()) {
                        read = new DataInputStream(new BufferedInputStream(
                                        new FileInputStream(path)));
                        write = new DataOutputStream(new BufferedOutputStream(
                                        new FileOutputStream(copyPath)));
                        byte[] buf = new byte[1024 * 512];
                        while (read.read(buf) != -1) {
                                write.write(buf);
                        }
                        read.close();
                        write.close();
                } else {
                        System.out.println("请输入正确的文件名或路径名");
                }
        }
}
有不明白的可以站短我。

点评

建议你的代码也加上相应的注释,这样思路会清晰些,会清晰易懂  发表于 2013-4-13 08:26
回复 使用道具 举报
另外,你的程序,可以修改一下,用递归来实现遍历文件夹下所有的子文件夹和文件的。
回复 使用道具 举报
建议你的代码加上相应的注释,这样思路会清晰些,也能发现自己的问题所在
回复 使用道具 举报
郭强 发表于 2013-4-13 00:44
另外,你的程序,可以修改一下,用递归来实现遍历文件夹下所有的子文件夹和文件的。 ...

我换了 一种方式 成功了 谢谢啦!
回复 使用道具 举报
黄玉昆 发表于 2013-4-13 08:25
建议你的代码加上相应的注释,这样思路会清晰些,也能发现自己的问题所在 ...

好滴 版主大大
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马