這是我第一次在這個偉大的頁面上提問,所以如果我犯了錯誤,請耐心等待。 我想要做的是在我更改後在我的用戶目錄中創建一個具有相對路徑的新文件。要更改我使用的用戶目錄System.setProperty("user.dir", "/data");
,然後我創建了一個文件對象File f2 = new File("f2");
並使用f2.createNewFile();
在我的文件系統上創建了空文件。在此之後,我預計該文件將出現在/ data/f2中,這就是f2.getAbsolutePath()
告訴我的。但令人困惑的是,該文件出現在「舊的,初始的」userDir中。更改「user.dir」後,相對路徑的File.createNewFile()使用錯誤的目錄 - 屬性
這裏是我的測試:
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:
初始USERDIR = /家庭/ PPS/NetBeansProjects/UserDirTest
f1.getAbsolutePath()=/home/pps/NetBeansProjects/UserDirTest/f1
getCanonicalPath()for。 = /家庭/ PPS /的NetBeansProjects/UserDirTest
改變USERDIR = /數據
f2.getAbsolutePath()= /數據/ F2
getCanonicalPath()進行。 = /數據
文件到/ home/PPS /的NetBeansProjects/UserDirTest:
- /主頁/ PPS /的NetBeansProjects/UserDirTest/F1
- /主頁/ PPS /的NetBeansProjects/UserDirTest/F2
f1和f2出現在同一個目錄中,儘管我更改了user.dir!!!
有人可以幫我嗎?
非常感謝
設置「user.dir」時可能出現[Java:File.exists()不一致)重複](http://stackoverflow.com/questions/2275362/java-file-exists-inconsistencies-when-setting-user- dir) – 2011-02-17 14:35:44
是的,奇怪的事情,我想我必須使用絕對路徑。 – ralfuslongus 2011-02-18 07:51:23