Что я пытаюсь сделать, так это создать новый файл с относительным путем в моем пользовательском каталоге после того, как я его изменил. Чтобы изменить пользовательский каталог, я использовал System.setProperty("user.dir", "/data");
, затем я создал файловый объект с помощью File f2 = new File("f2");
и создал пустой файл в своей файловой системе с помощью f2.createNewFile();
. После этого я ожидал, что файл появится в /data/f2, и это то, что мне говорит f2.getAbsolutePath()
. Но, что сбивает с толку, файл появляется в «старом, начальном» каталоге пользователя.
Вот мой тест:
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());
}
}
}
Это вывод, который я получаю:
files in /home/pps/NetBeansProjects/UserDirTest:
initial userDir = /home/pps/NetBeansProjects/UserDirTest
f1.getAbsolutePath() = /home/pps/NetBeansProjects/UserDirTest/f1
getCanonicalPath() for . = /home/pps/NetBeansProjects/UserDirTest
changed userDir = /data
f2.getAbsolutePath() = /data/f2
getCanonicalPath() for . = /data
files in /home/pps/NetBeansProjects/UserDirTest:
- /home/pps/NetBeansProjects/UserDirTest/f1
- /home/pps/NetBeansProjects/UserDirTest/f2
f1 и f2 появляются в одном и том же каталоге, хотя я изменил user.dir между ними?