相对路径的File.createNewFile()在更改“ user.dir” -Property

后使用错误的目录 这是我第一次在这个伟大的页面上提问,所以如果我犯错误,请耐心等待。 我想要做的是在我更改之后在我的用户目录中创建一个具有相对路径的新文件。要更改我使用的用户目录
System.setProperty("user.dir", "/data");
,然后我用
File f2 = new File("f2");
创建了一个文件对象,并使用
f2.createNewFile();
在我的文件系统上创建了空文件。在此之后,我希望文件出现在/ data / f2中,这就是
f2.getAbsolutePath()
告诉我的内容。但是,令人困惑的是,该文件出现在“旧的,初始的”userDir中。 这是我的测试:
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;

public class Main {

    private static FilenameFilter filter = new FilenameFilter() {

        public boolean accept(File dir, String name) {
            return (name.startsWith("f")) ? true : false;
        }
    };

    public static void main(String[] args) throws IOException {
        String userDirPropertyName = "user.dir";
        File initialUserDir = new File(System.getProperty(userDirPropertyName));

        System.out.println("files in " + initialUserDir.getAbsolutePath() + ":");
        for (File file : initialUserDir.listFiles(filter)) {
            System.out.println("  - " + file.getAbsoluteFile());
        }

        System.out.println("initial userDir = " + System.getProperty(userDirPropertyName));
        File f1 = new File("f1");
        f1.createNewFile();
        System.out.println("f1.getAbsolutePath() = " + f1.getAbsolutePath());
        System.out.println("getCanonicalPath() for . = " + new File(".").getCanonicalPath());


        System.setProperty(userDirPropertyName, "/data");

        System.out.println("changed userDir = " + System.getProperty(userDirPropertyName));
        File f2 = new File("f2");
        f2.createNewFile();
        System.out.println("f2.getAbsolutePath() = " + f2.getAbsolutePath());
        System.out.println("getCanonicalPath() for . = " + new File(".").getCanonicalPath());


        System.out.println("files in " + initialUserDir.getAbsolutePath() + ":");
        for (File file : initialUserDir.listFiles(filter)) {
            System.out.println("  - " + file.getAbsoluteFile());
        }
    }
}
这是输出,我得到: / home / pps / NetBeansProjects / UserDirTest中的文件: initial userDir = / home / pps / NetBeansProjects / UserDirTest f1.getAbsolutePath()= / home / pps / NetBeansProjects / UserDirTest / f1 getCanonicalPath()for。 = / home / pps / NetBeansProjects / UserDirTest 更改了userDir = / data f2.getAbsolutePath()= / data / f2 getCanonicalPath()for。 = /数据 / home / pps / NetBeansProjects / UserDirTest中的文件:    - / home / pps / NetBeansProjects / UserDirTest / f1    - / home / pps / NetBeansProjects / UserDirTest / f2 f1和f2出现在同一个目录中虽然我更改了user.dir!! 任何人都可以帮我吗? 非常感谢     
已邀请:
我刚刚复制了你的场景。我认为您的错误是您正在尝试使用系统属性来更改当前的工作目录。能够从系统属性中检索此目录只是一种方便的方法。如果更改属性,则不会更改目录本身。 解决方案是使用
File.mkdir()
File.mkdirs()
创建您想要的目录,然后使用
new File(myDir, fileName)
,其中myDir是您的新目录。     
不支持设置属性
user.dir
并导致各种奇怪的效果。     
无法在Java中更改当前目录。 更改系统属性时,将更改属性,但不会更改本机代码用于创建文件的实际工作目录。但是,getAbsolutePath使用user.dir系统目录的当前值来组成绝对路径。     

要回复问题请先登录注册