이 위대한 페이지에서 질문하는 것은 이번이 처음입니다. 실수 할 경우 나에게 인내심을 주시기 바랍니다. 내가 뭘하려고하면 변경 후 내 사용자 디렉토리에 상대 경로로 새 파일을 만드는 것입니다. System.setProperty("user.dir", "/data");
을 사용하는 사용자 디렉토리를 변경하려면 File f2 = new File("f2");
으로 파일 객체를 만들고 f2.createNewFile();
으로 파일 시스템에 빈 파일을 만들었습니다. 이 후 나는/data/f2에 파일이 나타날 것으로 예상했으며, 이것은 f2.getAbsolutePath()
이 말해주는 것입니다. 그러나 혼동스럽게도 파일은 "old, initial"userDir에 나타납니다. 내가 얻을,상대 경로에 대한 File.createNewFile()은 "user.dir"을 변경 한 후 잘못된 디렉토리를 사용합니다. - 속성
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());
}
}
}
이 출력 :
파일/홈/PPS는/NetBeansProjects/UserDirTest에 :
초기 UserDir을 =/가정/PPS/여기
f1.getAbsolutePath() =/home/pps/NetBeansProjects/UserDirTest/f1
에 대한 getCanonicalPath()입니다. =/홈/PPS/NetBeansProjects/UserDirTest
UserDir을 변경 =/데이터
f2.getAbsolutePath() =/데이터/F2의
getCanonicalPath(). IN/홈 =/데이터
파일/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) –
예, 이상한 일은 절대 경로를 사용해야합니다. – ralfuslongus