【问题标题】:java File renameTo()java文件renameTo()
【发布时间】:2015-04-20 20:24:47
【问题描述】:

首先 renameTo() 工作正常,问题是重命名后,文件 f 的路径仍然是旧的而不是新的,也就是说文件 f 不可用,必须更改.但是我该怎么做呢?

    ArrayList<File> list = new ArrayList();
    public void myfunction() {
        // some code to fill list

        for (File f:list){
            changeName(f);
            System.out.println(f.getName());  // this print the old name
        }
    }

    public void changeName(File f){
    File newFile = new File(new SimpleDateFormat("yyyyMMdd_HHmmss").format(f.lastModified())+".txt");
        f.renameTo(newFile);
        f = newFile; //this line here doesn't work
    }
}

【问题讨论】:

    标签: java file file-rename


    【解决方案1】:

    这是因为在 JAVA 中变量是passed by value。如果您想查看新内容,请返回 newFile,而不是 f = newFile; 声明。

    【讨论】:

    • @user2760830 大声笑.. 这是唯一的答案,据我所知,即使你不同意。顺便说一句,您可能希望接受答案,以便其他人受益:)
    【解决方案2】:

    File 实例不是文件句柄。这是

    文件和目录路径名的抽象表示。

    https://docs.oracle.com/javase/7/docs/api/java/io/File.html

    因此更改文件的名称(在系统中)不会更改用于访问它的任何File

    从您的 changeName 方法返回一个新的 File 实例。

    import java.io.File;
    
    public class SOPlayground {
    
        public static void main(String[] args) throws Exception {
            File before = new File("/tmp/before");
            File after = new File("/tmp/after");
            boolean success = before.renameTo(after);
            if (success) {
                before = after;
            }
            System.out.println(before);
        }
    }
    

    输出:

    /tmp/after
    

    【讨论】:

    • 有没有办法改变私有变量File.path?
    • private是有原因的。
    猜你喜欢
    • 2023-03-13
    • 2011-01-02
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    相关资源
    最近更新 更多