黑马程序员技术交流社区

标题: IO流中如何复制一个文件夹 [打印本页]

作者: 迷途羔羊    时间: 2015-8-28 09:12
标题: IO流中如何复制一个文件夹
这个文件夹里是非文本文件和文本文件都有,子文件夹里都是文本文件,这时是用字节流加递归,还是别的什么呢?
作者: 段山虎    时间: 2015-8-28 10:32
同求!!!!!
作者: Anlai    时间: 2015-8-28 12:14
我的思路是先判断是什么文件,如果是纯文本的话就用字符流,然后listFile方法获取文件名,判断是文件还是文件夹,这里就需要递归了,如果是文件夹,就调用本方法继续,然后在定义一个复制文件的方法,判断的如果是文件,就直接复制,这里有一段代码,可以参考一下,其实我也不是很会


package com.itheima_Test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
* 需求:编写一个程序,我想把这个目录下的所有带.java文件拷贝到另一个目录下,
*         拷贝成功以后把后缀名是.java改成.txt               
*
*/


import java.io.*;
public class CopyFile {
        public static void main(String[] args) {
                File orig=new File("D:\\code"); //源文件夹
                File dest=new File("D:\\newCode");//要复制过去的文件夹
                findAndCopyJava(orig,dest);
               
        }
        public static void copy(File orig,File dest){ //用于改后缀后复制
                BufferedReader buf = null;
                PrintWriter  out=null;;
                try{
                        buf=new BufferedReader(new InputStreamReader(new FileInputStream(orig))); //读取流,提示阅读效率
                        out=new PrintWriter(dest+"\\"+orig.getName().replace(".java", ".txt"));  // 把后缀改成.java,用Print流提升效率
                }catch(IOException e){
                        System.out.println("文件orig或者dest异常");
                }
                String line=null;
                try{
                while((line=buf.readLine())!=null){
                        out.println(line);
                }
               
                }catch(IOException e){
                        
                }
                finally{
                        try{
                                if(buf!=null)
                                        buf.close();
                                if(out!=null)
                                        out.close();
                        }catch(Exception e2){
                                
                        }
                }
        }
        public static void findAndCopyJava(File orig,File dest){  //
                if(!dest.exists()){            //不存在就创建目的目录,但是这个地址有可能是一个绝对地址。
                        dest.mkdir();
                }
                if(!dest.isDirectory()){    //所以再次判断存在的文件是否是一个目录,而不是文件。
                        dest.mkdir();
                }
                File[]  files=orig.listFiles();
                for(File file: files){     //遍历files
                        if(file.isDirectory()){
                                findAndCopyJava(file,dest);  //递归,一直到file是一个文件而不是目录。
                        }
                        else if(file.getName().endsWith(".java")){
                                copy(file,dest);
                        }
                }


        }
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2