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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© twtzhongxin 中级黑马   /  2014-3-13 17:55  /  1272 人查看  /  6 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

面试问题,将一个目录下的.java文件全部复制成.txt文件?

6 个回复

倒序浏览
  1. import java.io.*;
  2. /*
  3.     思路;
  4.            |-- 首先定义一个方法,用来copy单个文件,
  5.                 |-- 创建一个带缓冲的字符读取流与源文件相关联
  6.                         |-- 在创建一个带缓冲的字符写入流与目标文件相关联
  7.                         |-- 完成读写操作
  8.                         |-- 关闭资源
  9.            |-- 然后定义一个用来判断File对象是目录还是文件,用递归来遍历整个文件夹
  10.                 |-- 如果是目录,就递归该目录
  11.                         |-- 如果是文件就调用文件copy方法复制文件
  12. */
  13. class CopyFilesDemo2
  14. {
  15.         public static void main(String[] args)
  16.         {
  17.                 File sour = new File("e:\\Open_Sourse");
  18.                 File targ = new File("e:\\copy");
  19.                 targ.mkdir();
  20.                 findFile(sour,targ);
  21.         }

  22.         public static void findFile(File sour,File targ)
  23.         {
  24.                 File[] files = sour.listFiles();
  25.                 for(File file:files)
  26.                 {
  27.                         if(file.isDirectory())
  28.                         {
  29.                                 String dir = file.getName();
  30.                                 File newFile = new File(targ+"\\"+dir);
  31.                                 newFile.mkdirs();
  32.                                 findFile(file,newFile);
  33.                         }
  34.                         else
  35.                         {
  36.                                 try
  37.                                 {
  38.                                         if(file.getName().endsWith("java"))
  39.                                         {
  40.                                                 String fileName = file.getName();
  41.                                                 String[] newFileName = fileName.split("\\.");
  42.                                                 File new2File = new File(targ+"\\"+newFileName[0]+".txt");
  43.                                                 new2File.createNewFile();
  44.                                                 copyFile(file,new2File);
  45.                                         }
  46.                                        
  47.                                 }
  48.                                 catch (IOException e1)
  49.                                 {
  50.                                         e1.printStackTrace();
  51.                                         throw new RuntimeException("文件复制失败!");
  52.                                 }
  53.                         }
  54.                 }
  55.        
  56.         }

  57.         public static void copyFile(File sour,File targ)
  58.         {
  59.                 FileInputStream fis = null;
  60.                 FileOutputStream fos = null;
  61.                 try
  62.                 {
  63.                         if(!sour.isFile())
  64.                                 throw new RuntimeException("sour不是一个文件");
  65.                         fis = new FileInputStream(sour);
  66.                         fos = new FileOutputStream(targ);

  67.                         byte[] buf = new byte[1024];
  68.                         int len = 0;
  69.                         while((len = fis.read(buf))!=-1)
  70.                         {
  71.                                 fos.write(buf,0,len);
  72.                         }
  73.                        
  74.                 }
  75.                 catch (IOException e)
  76.                 {
  77.                         e.printStackTrace();
  78.                         throw new RuntimeException("文件复制失败!");
  79.                 }finally
  80.                 {
  81.                     try
  82.                     {
  83.                                 if(fis != null)
  84.                                         fis.close();
  85.                     }
  86.                     catch (IOException efr)
  87.                     {
  88.                                 efr.printStackTrace();
  89.                     }
  90.                         try
  91.                         {
  92.                                 if(fos != null)
  93.                                         fos.close();
  94.                         }
  95.                         catch (IOException efw)
  96.                         {
  97.                                 efw.printStackTrace();
  98.                         }
  99.                 }
  100.         }
  101. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报

第31行 为什么是 File newFile=new File(targ+"\\"+dir);??
这个文件就算是个目录,那也是sour目录里,你这改了之后路径不对了啊??newFile.mkdirs();也不会有文件啊,这个目录是新复制的文件夹。都还没复制过去文件呢。。。怎么递归的出来
回复 使用道具 举报
  1. package day01;

  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;

  5. public class CopyFilesDemo {

  6.        
  7.        
  8.         public static void main(String[] args) {
  9.                 // TODO Auto-generated method stub

  10.                 File source = new File("F:\\java基础");
  11.                 File target = new File("F:\\copy");
  12.                
  13.                 target.mkdir();
  14.                 findFile(source,target);
  15.         }

  16.         private static void findFile(File source, File target) {
  17.                 File[] files = source.listFiles();
  18.                 for(File file :files){
  19.                         if(file.isDirectory()){
  20.                                 String dir = file.getName();
  21.                         /*        System.out.println(dir);*/
  22.                                 File newFile = new File(target+"\\"+dir);
  23.                                 newFile.mkdir();
  24.                                 /*System.out.println(newFile.getName());*/
  25.                                 findFile(file,newFile);
  26.                                
  27.                                
  28.                                 }
  29.                         else{
  30.                                 try{
  31.                                         if(file.getName().endsWith("java")){
  32.                                                 String fileName = file.getName();
  33.                                                 String[] newFileName= fileName.split("\\.");
  34.                                                 File new2File= new File(target+"\\"+newFileName[0]+".txt");
  35.                                                 new2File.createNewFile();
  36.                                                 copyFile(file,new2File);
  37.                                        
  38.                                         }
  39.                                        
  40.                                        
  41.                                        
  42.                                 }catch(Exception e){
  43.                                         System.out.println("修改文件失败");
  44.                                 }
  45.                 }
  46.                
  47.                 }
  48.                
  49.         }

  50.         private static void copyFile(File source, File target) {
  51.                
  52.                 FileInputStream fis = null;
  53.                 FileOutputStream fos = null;
  54.                 try{
  55.                         if(!source.isFile())
  56.                                 throw new RuntimeException("source 不是一个文件");
  57.                         fis = new FileInputStream(source);
  58.                         fos =new FileOutputStream(target);
  59.                        
  60.                         byte[] buf  = new byte[1024];
  61.                         int len = 0;
  62.                         while((len=fis.read(buf))!=-1){
  63.                                 fos.write(buf, 0, len);
  64.                         }
  65.                        
  66.                 }catch(Exception e){
  67.                         System.out.println("文件复制失败");
  68.                 }finally{
  69.                         try{
  70.                                 if(fis!=null)
  71.                                         fis.close();
  72.                                 if(fos!=null)
  73.                                         fos.close();
  74.                         }catch(Exception e){
  75.                                 System.out.println("读取或存储失败");
  76.                         }
  77.                 }
  78.         }

  79. }
复制代码
回复 使用道具 举报
nizhenxingyun
回复 使用道具 举报

为何不用buffer?
回复 使用道具 举报
Teale 中级黑马 2014-3-14 12:30:05
7#
终于写出来了 {:3_49:}  刚学伤不起。 因为找不到JAVA文件做测试。。用创建的TXT改成JAVA后缀名,查找的时候还是把它们当了TXT。。。遇到无数挫折 囧。。 就把题目换成TXT变JAVA了

package 练习;
import java.io.*;
import java.util.*;
public class 面试题1 {
        private static List<File> list=new ArrayList();   //公用的list集合,先存再取
        public static void main(String[] args){
                findTxt(new File("C:\\Users\\Administrator\\Desktop\\JAVA基础笔记\\源"));   //存放TXT的地址
                copyJava(new File("C:\\Users\\Administrator\\Desktop\\JAVA基础笔记\\复制")); //要放复制的JAVA地址

        }
        public static void copyJava(File file){   
                if(!(file.isDirectory())){
                        try{                            //这边异常就不处理了。。偷懒下
                                file.mkdir();           //如果目录不存在,就创建这个文件夹
                        }catch(Exception e){}
                }
                for(File file1: list){                                  //高级for把存了File的list遍历
                        String name=file1.getName();
                        String[] name1=name.split(".txt");      //因为要存为JAVA文件,所以去除.txt的后缀
                        String newName=name1[0]+".java";                //在后缀添上.java成为新的文件名
                        try{
                                BufferedReader bufr=new BufferedReader(new InputStreamReader(new FileInputStream(file1)));  //一顿读遍历出来的TXT文件
                                PrintWriter pw=new PrintWriter(file+"//"+newName); //目的是传递进来的file文件夹里的新文件名
                                byte[] buf=new byte[1024];
                                String line=null;
                                while((line=bufr.readLine())!=null){
                                        pw.println(line);
                                }
                                bufr.close();
                                pw.close();
                        }catch(Exception e){}
                }
        }
        public  static void findTxt(File file){  //先看这里,传入需要找的文件夹绝对地址。
                if(file.isDirectory()){
                        File[] files=file.listFiles();
                        for(File file1 : files){
                                findTxt(file1);          //递归, 找出所有文件
                        }
                }
                else{
                        if(file.getName().endsWith(".txt")){    //所有文件里最后带.txt的文件全部存到list集合中
                                list.add(file);             //这里必须注意!!!花了快2个小时,就被这里坑了。list必须存File,
                                                                                        //开始存的list<String>=file.getabsolutepath,结果写不出来。原因是Windows文件是C:\xxx\xxx
                                                                                        //而JAVA 只认得 c:\\x\\或者 c:/xx/xx
                        }
                }
        }
}


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