黑马程序员技术交流社区

标题: 为什么用renameTo()方法重命名文件名会失败? 求解 [打印本页]

作者: zhangyiling5    时间: 2016-9-30 13:20
标题: 为什么用renameTo()方法重命名文件名会失败? 求解
本帖最后由 zhangyiling5 于 2016-9-30 13:22 编辑


public class Test {

        /**
         * 编写一个程序,把指定目录下的所有的带.java文件都拷贝到另一个目录中
         * 拷贝成功后,把后缀名是.java的改成.txt。
         */
        public static void main(String[] args) throws IOException {
                File f = new File("E:\\aaa\\");
                File[]arr = f.listFiles();
                FileInputStream fi = null;
                FileOutputStream fo = null;
                for (File file : arr) {
                        //System.out.println(file.getName());
                        //System.out.println(file.getPath());
                        if(file.isFile() && file.getName().endsWith(".java")){
                                fi = new FileInputStream(new File(file.getPath()));
                                fo = new FileOutputStream(new File("C:\\Users\\UPA\\Desktop\\a\\"+
                                                file.getName()));
                                int a;
                                byte []arr1 = new byte [1024];
                                while((a = fi.read(arr1)) != -1){
                                        fo.write(arr1, 0, a);
                                }
                        }
                }
                fi.close();
                fo.close();        
               
                File fi1 = new File("C:\\Users\\UPA\\Desktop\\a\\");
                File[]arr1 = fi1.listFiles();
               
                File fs = null;
               
                for (File file2 : arr1) {
                        System.out.println(file2);
                        String ds = file2.getName().replace(".java", ".txt");
                        fs = new File(fi1,ds);
                        //重命名了一个文件,其他的全部false???
                        boolean r = file2.renameTo(fs);
                        System.out.println(r);
                }
        }
}
应该所有文件都会改为txt格式的,可是事与愿违了...



作者: 寒冰夜    时间: 2016-9-30 14:04
也不大懂..怎么办 哎
作者: zhangyiling5    时间: 2016-9-30 14:13
寒冰夜 发表于 2016-9-30 14:04
也不大懂..怎么办 哎

完全懵逼..
作者: 胡小胡小胡    时间: 2016-9-30 22:21
package Lianxi24;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;

public class Test_IO {
        // 输入一个路径,将该路径下(包括子文件夹)所有以.java结尾的文件复制到别的路径之后再改名为.txt
        // 键盘录入一个路径,判断录入的路径是否正确
        // 定义一个递归的方法
        // 将录入的路径封装成file数组
        // 遍历数组,判断是文件路径还是文件夹路径
        // 如果是文件路径就读写到别的文件夹中
        // 如果是文件夹路径就递归调用
        public static void main(String[] args) throws IOException {
                File src = getFile();
                File dest = getFile();
                if (!src.equals(dest)) {
                        diGui(src, dest);
                } else {
                        System.out.println("录入了相同的文件名");
                }

        }

        public static File getFile() {
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入文件路径:");
                while (true) {
                        String line = sc.nextLine();
                        File file = new File(line);
                        if (!file.exists()) {
                                System.out.println("输入的文件路径不存在,请重新输入:");
                        } else if (file.isFile()) {
                                System.out.println("输入的是文件夹路径请重新输入:");
                        } else {
                                return file;
                        }
                }
        }

        public static void diGui(File src, File dest) throws IOException {
                File newSrc = new File(dest, src.getName());// 在目标文件中创建与原文件相同的文件
                newSrc.mkdir();
                File[] sArr = src.listFiles(); // 将原文件封装成file数组
                for (File file : sArr) { // 遍历数组,获取到每一个文件
                        if (file.isFile() && file.getName().endsWith(".java")) { // 判断是否是文件并以.java结尾的
                                BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
                                BufferedOutputStream bos = new BufferedOutputStream(
                                                new FileOutputStream(new File(newSrc, file.getName().replaceAll(".java", ".txt"))));
                                int b;
                                while ((b = bis.read()) != -1);
                                {
                                        bos.write(b);
                                }
                                bis.close();
                                bos.close();
                        } else if (file.isDirectory()) {
                                diGui(file, newSrc);
                        }
                }

        }

}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2