想写一段代码测试File类对象的不可变性,求解谢谢!!!File t1 = new File("D:" + File.separatorChar + "final.java");
File t2 = new File("D:" + File.separatorChar + "finalaa.java");
System.out.println("是否重命名成功:" + t1.renameTo(t2));//为什么无法重命名成功?

解决方案 »

  1.   

    这样的,lz只是创建了文件路径,并没有真正地创建文件,所以如果你在File t1 = new File("D:" + File.separatorChar + "final.java");后面加一句 System.out.println(t1.exists());输出的肯定是false,同理t2也是一样的,一个不存在的文件是不能被重命名的。改进方法如下:在第一行后面加一行,t1.createNewFile();                File t1 = new File("D:" + File.separatorChar + "final.java");
    t1.createNewFile();
    System.out.println("t1 exists? " + t1.exists()); File t2 = new File("D:" + File.separatorChar + "finalaa.java");
    boolean yes = t1.renameTo(t2);
    if (yes) {
    System.out.println("succeed");
    } else
    System.out.println("failed");
    }然后就能成功,已经测试过了,输出结果为t1 exists? true
    succeed
      

  2.   

    非常感谢您的详细回复。
    程序运行之后final.java被重命名为finalaa.java了。相应的路径中只存在finalaa.java这个被重命名后的文件。
                     File t1 = new File("D:" + File.separator + "final.java");
    try {
    t1.createNewFile();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    System.out.println(t1.exists());
    File t2 = new File("D:" + File.separatorChar + "finalaaa.java");
    System.out.println(t1.getName());
    System.out.println("是否重命名成功:" + t1.renameTo(t2));//ok
    System.out.println("是否相等:" +t1.equals(t2)); //false
    System.out.println(t1.getPath());//构建时的路径
    System.out.println(t2.getPath());
    System.out.println(t1.getName());//构建时的文件名
    System.out.println(t2.getName());
    请问,既然File对象是不可变的,并且改名之后也是不同的对象,为什么还有个重命名方法呢?重命名之前的文件去哪里了?
      

  3.   

    我的理解是new File(String path)并没有创建文件本身,只是说我可能要在这个路径创建文件。t1被创建以后(调用了createNewFile),文件就实实在在地在那里了,重命名为finalaaa.java以后,文件还是t1这个文件,只是路径改变了,从而使名字变了。由始至终只有一个文件(也就是说t2只是把地方标出来了,并没有得到创建,当t1想占用t2的地盘的时候,t2让给了t1)不知道有没有解决你的问题