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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Optimus 初级黑马   /  2014-12-12 10:31  /  1182 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

要求:编写一个程序,把某个目录下所有的带.java文件拷贝到另一个目录中,拷贝成功后,把后缀名是.java改成.txt
下面是我写的实现,大家交流下:
  1. public class CopyFileDemo {
  2.         public static void main(String[] args) {
  3.                 File file = new File("D://code");
  4.                 String suffix = ".java";
  5.                 findFile(file, suffix);
  6.                 System.out.println("文件复制成功!");
  7.         }
  8.         /**
  9.          * 遍历目录,找出后缀为.java的文件
  10.          *
  11.          * @param file
  12.          * @param suffix
  13.          */
  14.         public static void findFile(File file, String suffix) {
  15.                 if (file == null)
  16.                         return;
  17.                 if (file.isDirectory()) {// 如果file对象是目录
  18.                         File[] files = file.listFiles();
  19.                         if (files != null) {
  20.                                 for (File f : files) {
  21.                                         findFile(f, suffix);
  22.                                 }
  23.                         }
  24.                 } else {// 如果file对象是文件
  25.                         //获取jpg路径名
  26.                         String path = file.getPath().toLowerCase();
  27.                         //截取jpg文件名前缀
  28.                         String prefixName = path.substring(path.lastIndexOf("\\")+1, path.indexOf("."));
  29.                         String newFileName = prefixName + ".txt";
  30.                         if (path.endsWith(suffix)) {
  31.                                 // 如果文件是java文件,复制到另一个目录
  32.                                 File targetFile = new File("F:\\test" + File.separator + newFileName);
  33.                                 copyFile(file, targetFile);
  34.                         }
  35.                 }
  36.         }
  37.         /**
  38.          * 复制文件到另一个目录,同时修改文件后缀为.txt
  39.          *
  40.          * @param sourceFile
  41.          * @param targetFile
  42.          * @param prefix
  43.          * @param suffix
  44.          */
  45.         public static void copyFile(File sourceFile, File targetFile) {
  46.                 String line = null;
  47.                 BufferedReader br = null;
  48.                 BufferedWriter bw = null;
  49.                 try {
  50.                         br = new BufferedReader(new InputStreamReader(new FileInputStream(
  51.                                         sourceFile)));
  52.                         bw = new BufferedWriter(new OutputStreamWriter(
  53.                                         new FileOutputStream(targetFile)));
  54.                         while ((line = br.readLine()) != null) {
  55.                                 bw.write(line);
  56.                                 bw.flush();
  57.                         }
  58.                 } catch (FileNotFoundException e) {
  59.                         e.printStackTrace();
  60.                 } catch (IOException e) {
  61.                         e.printStackTrace();
  62.                 } finally {
  63.                         try {
  64.                                 br.close();
  65.                                 bw.close();
  66.                         } catch (Exception e) {
  67.                                 e.printStackTrace();
  68.                         }
  69.                 }
  70.         }
  71. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
船长 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
赞一个!
回复 使用道具 举报
给力                    
回复 使用道具 举报
很好- -我写成的是这样。。
  1. import java.io.BufferedInputStream;
  2. import java.io.BufferedOutputStream;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileOutputStream;

  6. //复制一个文件夹下的所有java文件到另一目录,且将。java替换成。txt
  7. public class CopyDir
  8. {
  9.         public static void main(String[] args)
  10.         {
  11.                 File src=new File("D:\\src");//想要复制的文件目录
  12.                 File dest=new File("D:\\srcCopy");//目的文件目录
  13.                
  14.                 dest.mkdir();//创建目的文件夹
  15.                 copyDir(src,dest);//复制文件并更改格式
  16.         }

  17.         private static void copyDir(File src, File dest)
  18.         {
  19.                 File[] files=src.listFiles();//获取文件列表
  20.                 for(File file:files)
  21.                 {
  22.                         if(file.isDirectory())//如果是文件夹
  23.                         {
  24.                                 File f=new File(dest.getAbsolutePath()+"\\"+file.getName());//封装目的地对应的文件夹对象
  25.                                 f.mkdir();//创建目的地对应目录
  26.                                 copyDir(file,f);//递归展开目录
  27.                         }
  28.                         else//如果是文件
  29.                         {
  30.                                 if(file.getName().endsWith(".java"))//如果是java文件
  31.                                 {
  32.                                         String path=dest.getAbsoluteFile()+"\\"+file.getName();//用字符串保存对应的文件路径
  33.                                         path=path.replaceAll(".java", ".txt");//将。java替换成。txt
  34.                                         File f=new File(path);//将该文件对象封装
  35.                                         copyFile(file,f);//复制文件
  36.                                 }
  37.                         }
  38.                 }
  39.         }

  40.         private static void copyFile(File src, File dest)
  41.         {
  42.                 try
  43.                 {
  44.                         BufferedInputStream bi=new BufferedInputStream(new FileInputStream(src));//创建文件输入流
  45.                         BufferedOutputStream bo=new BufferedOutputStream(new FileOutputStream(dest));//创建文件输出流
  46.                        
  47.                         //写入数据
  48.                         byte[] buf=new byte[1024];
  49.                         int len=0;
  50.                         while((len=bi.read(buf))!=-1)
  51.                         {
  52.                                 bo.write(buf,0,len);
  53.                         }
  54.                         bi.close();
  55.                         bo.close();
  56.                 }
  57.                 catch (Exception e)
  58.                 {
  59.                         e.printStackTrace();
  60.                 }
  61.                
  62.         }
  63. }
复制代码
回复 使用道具 举报
很好,但是我觉得有个地方改一下比较好
回复 使用道具 举报
手残 了 按回车了,我说的是这个地方
第26 行
         //获取java路径名
                        String path = file.getPath().toLowerCase();
应该获取Java文件的绝对路径名
     因为如果在目录(“src”)中查找,会出现问题,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马