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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© www851903307 中级黑马   /  2015-2-19 17:11  /  1142 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/**
* 编写一个程序的时候,我想把这个目录下的所有的带.java的文件都拷贝到另一个目录中,
* 拷贝成功后,把后缀名是.java的改成.txt
* @author Administrator
*/
public class Io2 {

        public static void main(String[] args) throws IOException {
                //源文件
                File file = new File("e:\\1");
                File[] files =file.listFiles();
                //进行文件遍历
                for (File file2 : files) {
                        String line = null;
                        //进行过滤
                        if(file2.getName().endsWith(".java")){
                                //后缀名替换
                                String newName =file2.getName().replace(".java", ".txt");
                                //读取流
                                BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file2)));
                                //写入流
                                File tarFile = new File("d:\\2",newName);
                                BufferedWriter bw = new BufferedWriter(new FileWriter(tarFile));
                                while ((line=br.readLine())!=null) {
                                        bw.write(line);
                                }
                                //关闭流
                                br.close();
                                bw.close();
                        }
                }       
        }
}
请问:(1)File tarFile = new File("d:\\2",newName);  目的只有文件夹地址,没有newName会报错
(2)我现在的程序是不是不太符合先复制,后改名的题意


评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

13 个回复

倒序浏览
第一个问题  File类的构造函数中  是这样的  new File(File dir, String name); 还有很多 不知道 你说的是哪一个? 这个应该不是问题, 查查API 就知道了
第二个问题 ,  需要用到 renameTo()方法
f
回复 使用道具 举报
我觉得先复制是先把所有.java文件复制到目的地,然后在到目的地改名才对吧

点评

给版主点歌赞!!  发表于 2015-2-19 19:13
回复 使用道具 举报 1 0
  1. package cn.itheima.demo;

  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. * 需求:复制指定目录下的指定文件,并修改后缀名。
  11. * 指定的文件是:.java文件。
  12. * 指定的后缀名是:.txt文件
  13. *
  14. * 分析:
  15. *                 A:封装目录
  16. *                 B:获取该目录下的java文件的File数组
  17. *                 C:遍历该File数组,得到每一个File对象
  18. *                 D:把该File进行复制
  19. *                 E:在目的地目录下改名
  20. */
  21. public class CopyFolderDemo {
  22.         public static void main(String[] args) throws IOException {
  23.                 // 封装目录
  24.                 File srcFolder = new File("e:\\java");
  25.                 // 封装目的地
  26.                 File destFolder = new File("e:\\jad");
  27.                 // 如果目的地目录不存在,就创建
  28.                 if (!destFolder.exists()) {
  29.                         destFolder.mkdir();
  30.                 }

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

  38.                 // 遍历该File数组,得到每一个File对象
  39.                 for (File file : fileArray) {
  40.                         String name = file.getName();
  41.                         File newFile = new File(destFolder, name);
  42.                         copyFile(file, newFile);
  43.                 }

  44.                 // 在目的地目录下改名
  45.                 File[] destFileArray = destFolder.listFiles();
  46.                 for (File destFile : destFileArray) {

  47.                         String name = destFile.getName();
  48.                         String newName = name.replace(".java", ".txt");

  49.                         File newFile = new File(destFolder, newName);
  50.                         destFile.renameTo(newFile);
  51.                 }
  52.         }

  53.         // 复制文件的方法
  54.         private static void copyFile(File file, File newFile) throws IOException {
  55.                 BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
  56.                                 file));
  57.                 BufferedOutputStream bos = new BufferedOutputStream(
  58.                                 new FileOutputStream(newFile));

  59.                 byte[] bys = new byte[1024];
  60.                 int len = 0;
  61.                 while ((len = bis.read(bys)) != -1) {
  62.                         bos.write(bys, 0, len);
  63.                 }

  64.                 bos.close();
  65.                 bis.close();
  66.         }
  67. }
复制代码

点评

给版主点个赞!  发表于 2015-2-19 19:12
回复 使用道具 举报 1 0
wf111sxwf 发表于 2015-2-19 18:22
第一个问题  File类的构造函数中  是这样的  new File(File dir, String name); 还有很多 不知道 你说的是 ...

假如将某个文件复制到d盘  目的 File dir = new File("d:\\");  这样会报错,必须定义第二个参数 ,这是为啥啊,name该如何定义跟源文件相同的文件名?

点评

建议你看一下api中File的构造  发表于 2015-2-19 20:08
File类初始化的文件对象,必须是文件。不能是目录哦  发表于 2015-2-19 20:07
回复 使用道具 举报
D盘是个盘符啊  所以你肯定的指定文件名称啊  你可以写成  new File("d:\\ xxxx")  或者 指定目录  new File(File file, String filename).
回复 使用道具 举报
回复 使用道具 举报
wf111sxwf 发表于 2015-2-19 19:05
D盘是个盘符啊  所以你肯定的指定文件名称啊  你可以写成  new File("d:\\ xxxx")  或者 指定目录  new Fil ...

受教了,只是单纯的指定文件夹不行。。。
回复 使用道具 举报
lwj123 发表于 2015-2-19 18:32
我觉得先复制是先把所有.java文件复制到目的地,然后在到目的地改名才对吧 ...

恩恩  我写的思路有问题
回复 使用道具 举报
好深奥啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马