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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴超 金牌黑马   /  2012-6-22 11:39  /  1493 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package com.test05;

  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.InputStream;
  6. import java.io.OutputStream;
  7. import java.util.ArrayList;
  8. import java.util.List;

  9. /*
  10. * 思路:先对e:盘下所有文件进行遍历。
  11. * 如果是.java的文件,替换后缀名.java>>>.jad,
  12. * 将其拷贝至d:javaDir文件夹中
  13. *
  14. *
  15. */
  16. public class Demo05 {

  17.         /**
  18.          * @param args
  19.          * @throws Exception
  20.          */
  21.         public static void main(String[] args) throws Exception {
  22.                 // TODO Auto-generated method stub
  23.                 File dir = new File("e:\\");
  24.                 fileTolist(dir);

  25.         }

  26.         public static void fileTolist(File dir) throws Exception {
  27.                 // 创建要遍历的根目录
  28.                 File[] files = dir.listFiles();
  29.                 // 判断
  30.                 for (File file : files) {
  31.                         if (file.length() == 0)
  32.                                 continue;
  33.                         if (file.isDirectory()) {
  34.                                 fileTolist(dir);
  35.                         } else {
  36.                                 if (file.getName().endsWith(".java")) {
  37.                                         // 符合的文件copy到指定目录
  38.                                         File destDir = new File("d:/jad");
  39.                                         if (!destDir.exists())
  40.                                                 destDir.mkdir();
  41.                                         FileInputStream fis = new FileInputStream(file);
  42.                                         String fileName = file.getName().replace(".java", ".jad");

  43.                                         FileOutputStream fos = new FileOutputStream(new File(
  44.                                                         destDir, fileName));

  45.                                         copy(fis, fos);
  46.                                 }
  47.                         }
  48.                 }
  49.         }

  50.         // copy文件
  51.         public static void copy(InputStream ips, OutputStream ops) throws Exception {

  52.                 byte[] buf = new byte[1024];
  53.                 int num = 0;
  54.                 while ((num = ips.read(buf)) != -1) {
  55.                         ops.write(buf, 0, num);
  56.                 }
  57.                 ops.close();
  58.                 ips.close();
  59.         }
  60. }
复制代码

2 个回复

正序浏览
你这个 for (File file : files)之前要做判断的。不然就容易出空指针异常,你这种硬编码当然问题不大,但是一般这种功能是作为函数封装的,对哪个盘遍历应该是由调用者指定。我主函数故意输入一个不 存在的盘符,你这里就死翘翘了。不过我看你if (file.length() == 0)这行代码可能是想解决这个问题,但是file.length()是个什么东西?files.length?
还有你关流的操作为什么在拷贝文件里面做?我觉得很奇怪,你在哪个函数关联的流就应该在哪个文件关啊。
d:/jad最好是作为函数参数传进来。
String fileName = file.getName().replace(".java", ".jad");也不严谨,如果我文件名叫1.java.java呢?
回复 使用道具 举报



不知道这是不是你想要的,我感觉这个代码写的挺好的: 主要思路就是::1、  将原文件中的文件都获取出来,得到一个装文件名的数组。 File[] files。 然后对该数组遍历,如果是文件夹,则再接着获取, 知道最后能查看到每个具体的文件,  并判断该文件是不是用“.java”结尾,是的话则替换成“.jad”   。这样就获得了所有需要的文件
         2、  定义一个复杂方法;  public static void copy(InputStream ips, OutputStream ops) , 因为复杂用到 字节输入和输出流,就用这两个作为参数。
     3、在 第1步中调用这个方法。
    4、完成主函数的调用。只有这样程序才能运行。

不知道这是不是楼主想要的

评分

参与人数 1技术分 +1 收起 理由
职业规划-刘倩老师 + 1 赞一个!

查看全部评分

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