Я впервые задаю вопрос на этой замечательной странице, поэтому, пожалуйста, наберитесь терпения, если я ошибусь.
Я пытаюсь создать новый файл с относительным путем в моем пользовательском каталоге после того, как я его изменил. Чтобы изменить каталог пользователя, я использовал 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:
исходный userDir = / home / pps / NetBeansProjects / UserDirTest
f1.getAbsolutePath () = / home / pps / NetBeansProjects / UserDirTest / f1
getCanonicalPath () для. = / home / pps / NetBeansProjects / UserDirTest
измененный userDir = / data
f2.getAbsolutePath () = / data / f2
getCanonicalPath () для. = / данные
файлы в / home / pps / NetBeansProjects / UserDirTest:
- / home / pps / NetBeansProjects / UserDirTest / f1
- / home / pps / NetBeansProjects / UserDirTest / f2
f1 и f2 появляются в одном каталоге, хотя я изменил user.dir между!?!
Кто-нибудь может мне помочь с этим?
Большое спасибо