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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 abc784990536 于 2015-1-8 12:17 编辑

刚才看到一位学员的入学面试考题http://bbs.itheima.com/forum.php?mod=viewthread&tid=156391&extra=page%3D1,他一道题不会做,我试了下,请指教!
  1. package IO;

  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileOutputStream;
  7. import java.io.FilenameFilter;
  8. import java.io.IOException;

  9. /*
  10. * 需求:编写一个程序,我想把这个目录下所有的带.java文件拷贝到另一个目录中,拷贝成功后,把后缀名是.java改成.txt
  11. * 指定的文件是:.java文件。
  12. * 指定的后缀名是:.txt
  13. * 指定的目录是:txt
  14. *
  15. * 数据源:e:\\java\\A.java
  16. * 目的地:e:\\txt\\A.txt
  17. *
  18. * 分析:
  19. *                 A:封装目录
  20. *                 B:获取该目录下的java文件的File数组
  21. *                 C:遍历该File数组,得到每一个File对象
  22. *                 D:把该File进行复制
  23. *                 E:在目的地目录下改名
  24. */
  25. public class CopyFolderDemo {
  26.         public static void main(String[] args) throws IOException {
  27.                 // 封装目录
  28.                 File srcFolder = new File("e:\\java");
  29.                 // 封装目的地
  30.                 File destFolder = new File("e:\\txt");
  31.                 // 如果目的地目录不存在,就创建
  32.                 if (!destFolder.exists()) {
  33.                         destFolder.mkdir();
  34.                 }

  35.                 // 获取该目录下的java文件的File数组
  36.                 File[] fileArray = srcFolder.listFiles(new FilenameFilter() {
  37.                         @Override
  38.                         public boolean accept(File dir, String name) {
  39.                                 return new File(dir, name).isFile() && name.endsWith(".java");
  40.                         }
  41.                 });

  42.                 // 遍历该File数组,得到每一个File对象
  43.                 for (File file : fileArray) {
  44.                         // System.out.println(file);
  45.                         // 数据源:e:\java\DataTypeDemo.java
  46.                         // 目的地:e:\\text\DataTypeDemo.java
  47.                         String name = file.getName();
  48.                         File newFile = new File(destFolder, name);
  49.                         copyFile(file, newFile);
  50.                 }

  51.                 // 在目的地目录下改名
  52.                 File[] destFileArray = destFolder.listFiles();
  53.                 for (File destFile : destFileArray) {
  54.                         // System.out.println(destFile);
  55.                         // e:\text\DataTypeDemo.java
  56.                         // e:\\text\\DataTypeDemo.text
  57.                         String name =destFile.getName(); //DataTypeDemo.java
  58.                         String newName = name.replace(".java", ".txt");//DataTypeDemo.jad
  59.                         
  60.                         File newFile = new File(destFolder,newName);
  61.                         destFile.renameTo(newFile);
  62.                 }
  63.         }

  64.         private static void copyFile(File file, File newFile) throws IOException {
  65.                 BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
  66.                                 file));
  67.                 BufferedOutputStream bos = new BufferedOutputStream(
  68.                                 new FileOutputStream(newFile));

  69.                 byte[] bys = new byte[1024];
  70.                 int len = 0;
  71.                 while ((len = bis.read(bys)) != -1) {
  72.                         bos.write(bys, 0, len);
  73.                 }

  74.                 bos.close();
  75.                 bis.close();
  76.         }
  77. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

8 个回复

倒序浏览
没有测试,应该是对的,同学做的不错加油。
回复 使用道具 举报
之前也写了一个

  1. package exercises;

  2. import java.io.File;
  3. import java.io.FileReader;
  4. import java.io.FileWriter;
  5. import java.io.IOException;

  6. /**
  7. * 编写一个程序,把这个目录里边的所有的带.java文件都拷贝到另一个目录里边,拷贝成功以后,把后缀名是.java改成.txt]
  8. *
  9. * @author always
  10. *
  11. */
  12. public class CopyFiles {

  13.         public static void main(String[] args) throws Exception {
  14.                 File file = new File("D:\\Java\\java027\\day13");
  15.                 String destDir = "E:\\test";
  16.                 File[] files = file.listFiles();

  17.                 for (File f : files) {
  18.                         if (f.getName().endsWith(".java"))
  19.                                 copyFile(f, destDir + "\\" + f.getName());
  20.                 }
  21.                
  22.                 renameFile(destDir);
  23.         }

  24.         private static void renameFile(String destDir) {
  25.                
  26.                 File file = new File(destDir);
  27.                 for (File f : file.listFiles()) {
  28.                         String fileName = f.getName();
  29.                         String newName = f.getParent() + "\\"
  30.                                         + fileName.substring(0, fileName.lastIndexOf(".")) + ".txt";
  31.                         if (fileName.endsWith(".java"))
  32.                                 f.renameTo(new File(newName));
  33.                 }
  34.         }

  35.         private static void copyFile(File file, String dest) throws IOException {
  36.                 FileReader fr = new FileReader(file);
  37.                 FileWriter fw = new FileWriter(dest);
  38.                 int len = 0;
  39.                 while ((len = fr.read()) != -1) {
  40.                         fw.write(len);
  41.                         fw.flush();
  42.                 }

  43.                 fr.close();
  44.                 fw.close();
  45.         }

  46. }
复制代码
回复 使用道具 举报
学习了!!!
回复 使用道具 举报
看了个大概,没看出什么东东,只有运行下可能知道怎么回事
回复 使用道具 举报
noiary 发表于 2015-1-9 15:11
之前也写了一个

和我做法一样
回复 使用道具 举报
流关闭时应该先判断一下是否为空
回复 使用道具 举报
da_chuan 发表于 2015-1-13 23:55
流关闭时应该先判断一下是否为空

直接抛异常了,就不try了
回复 使用道具 举报
http://bbs.itheima.com/thread-164427-1-1.html   大家可以看一下这个程序的问题出在哪里?代码没有错,看标题
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马