내 메인 클래스가 C:\Users\Justian\Documents\
. 내 프로그램이 안에 있음을 표시하려면 어떻게해야 C:\Users\Justian\Documents
합니까?
하드 코딩은 옵션이 아닙니다. 다른 위치로 옮길 경우 적응할 수 있어야합니다.
폴더에 CSV 파일을 덤프하고 프로그램이 모든 파일을 인식하도록 한 다음 데이터를로드하고 조작하고 싶습니다. 그 폴더로 이동하는 방법을 알고 싶습니다.
답변
한 가지 방법은 시스템 속성 을 사용하는 System.getProperty("user.dir");
것입니다. 그러면 “속성이 초기화되었을 때 현재 작업 디렉터리”가 제공됩니다. 이것은 아마도 당신이 원하는 것입니다. 곳을 찾아 java
실제 .jar 파일이 컴퓨터에 다른 곳에 상주 할 수있는 경우에도 명령이 프로세스에 파일과 디렉토리에 귀하의 경우, 발행되었다. 실제 .jar 파일의 디렉토리를 갖는 것은 대부분의 경우 유용하지 않습니다.
다음은 .class 파일이있는 .class 또는 .jar 파일의 위치에 관계없이 명령이 호출 된 현재 디렉토리를 인쇄합니다.
public class Test
{
public static void main(final String[] args)
{
final String dir = System.getProperty("user.dir");
System.out.println("current dir = " + dir);
}
}
당신이있는 경우 /User/me/
와 위의 코드가 포함 된 .jar 파일이있는 /opt/some/nested/dir/
명령 java -jar /opt/some/nested/dir/test.jar Test
출력됩니다 current dir = /User/me
.
또한 좋은 객체 지향 명령 줄 인수 구문 분석기를 사용하는 것도 중요합니다. Java Simple Argument Parser 인 JSAP를 적극 권장 합니다. 이렇게 System.getProperty("user.dir")
하면 동작을 재정의하기 위해 다른 것을 사용 하고 대신 전달할 수 있습니다. 훨씬 더 유지 관리가 가능한 솔루션입니다. 이렇게하면 처리하기 위해 디렉토리를 전달하기가 매우 쉽고, user.dir
아무것도 전달되지 않으면 다시 사용할 수 있습니다 .
답변
사용 CodeSource#getLocation()
. 이것은 JAR 파일에서도 잘 작동합니다. 당신은 얻을 수 CodeSource
로 ProtectionDomain#getCodeSource()
하고, ProtectionDomain
차례로 얻을 수 있습니다 Class#getProtectionDomain()
.
public class Test {
public static void main(String... args) throws Exception {
URL location = Test.class.getProtectionDomain().getCodeSource().getLocation();
System.out.println(location.getFile());
}
}
OP의 의견에 따라 업데이트 :
폴더에 CSV 파일을 덤프하고 프로그램이 모든 파일을 인식하도록 한 다음 데이터를로드하고 조작하고 싶습니다. 그 폴더로 이동하는 방법을 알고 싶습니다.
이를 위해서는 프로그램에서 상대 경로를 하드 코딩 / 알고 있어야합니다. 대신 클래스 경로에 경로를 추가하여 사용할 수 있습니다.ClassLoader#getResource()
File classpathRoot = new File(classLoader.getResource("").getPath());
File[] csvFiles = classpathRoot.listFiles(new FilenameFilter() {
@Override public boolean accept(File dir, String name) {
return name.endsWith(".csv");
}
});
또는 경로를 main()
인수 로 전달합니다.
답변
File currentDirectory = new File(new File(".").getAbsolutePath());
System.out.println(currentDirectory.getCanonicalPath());
System.out.println(currentDirectory.getAbsolutePath());
다음과 같이 인쇄합니다.
/path/to/current/directory
/path/to/current/directory/.
참고 File.getCanonicalPath()
발생은 IOException가 확인하지만 같은 것들을 제거합니다 ../../../
답변
this.getClass().getClassLoader().getResource("").getPath()
답변
방금 사용했습니다.
import java.nio.file.Path;
import java.nio.file.Paths;
…
Path workingDirectory=Paths.get(".").toAbsolutePath();
답변
현재 작업 디렉토리를 얻으려면 다음 줄을 사용하십시오.
System.out.println(new File("").getAbsolutePath());
답변
현재 소스 코드의 절대 경로를 원한다면 내 제안은 다음과 같습니다.
String internalPath = this.getClass().getName().replace(".", File.separator);
String externalPath = System.getProperty("user.dir")+File.separator+"src";
String workDir = externalPath+File.separator+internalPath.substring(0, internalPath.lastIndexOf(File.separator));