에서 파일을 참조하는 방법 :나는 또한 패키지 X에서 패키지는 다음과 같이 Y 및 Z가, MyClassin 패키지 X를 자바 Pacakage
X - MyClass에
X - Y - 일부 파일
X - Z - 일부 파일
MyClass에서 Y 및 Z 패키지의 모든 파일 목록을 얻으려면 어떻게해야합니까?
에서 파일을 참조하는 방법 :나는 또한 패키지 X에서 패키지는 다음과 같이 Y 및 Z가, MyClassin 패키지 X를 자바 Pacakage
X - MyClass에
X - Y - 일부 파일
X - Z - 일부 파일
MyClass에서 Y 및 Z 패키지의 모든 파일 목록을 얻으려면 어떻게해야합니까?
Java 패키지는 디렉토리 구조를 미러링합니다. File 클래스를 사용할 수 있습니다. 특히 listFiles()
방법을 참조하십시오.
편집
당신은 동적으로 실행 위치를 찾을 수 있습니다. 다음은 최근에 작업 한 프로젝트의 코드입니다. 내가 JAR을 실행하고있는 디렉토리 (JAR을 실행하고 있다면)를 찾을 수 있기를 원한다. 그렇지 않으면 인의 JAR 파일을 클래스 파일에서 실행하고있다. 제 경우 JAR 파일은 <project root>/bin
이고 수업은 <project root>/classes
입니다.
final URL location;
final String classLocation = JavaPlanner.class.getName().replace('.', '/') + ".class";
final ClassLoader loader = JavaPlanner.class.getClassLoader();
if(loader == null)
{
try { throw new ClassNotFoundException("class loaded with bootstrap loader"); }
catch (ClassNotFoundException cnfe) { throw new InitializationException(cnfe); }
}
else
{
location = loader.getResource(classLocation);
}
if(location.toString().startsWith("file:/")) // Line 14
{
// Running from .class file
String path;
try { path = URLDecoder.decode(location.toString().substring(6), "UTF-8"); }
catch(UnsupportedEncodingException uee) { throw new InitializationException(uee); }
// Move up package folders to root, add /bin/
File package_ = new File(path).getParentFile();
binPath = package_.getParentFile().getParentFile().getParentFile().getParentFile() + File.separator + "bin" + File.separator;
}
else // Line 25
{
// Running from .jar file
String jarURL = JavaPlanner.class.getResource("/" + JavaPlanner.class.getName().replaceAll("\\.", "/") + ".class").toString();
jarURL = jarURL.substring(4).replaceFirst("/[^/]+\\.jar!.*$", "/");
try
{
File dir = new File(new URL(jarURL).toURI());
jarURL = dir.getAbsolutePath();
}
catch(MalformedURLException mue) { throw new InitializationException(mue); }
catch(URISyntaxException use) { throw new InitializationException(use); }
binPath = jarURL;
}
14 번째 줄에는 클래스 파일에서 응용 프로그램을 실행하고있는 것으로 나타났습니다. String path
은 처음에 JavaPlanner
(내 main
메소드를 포함하는 클래스)의 파일 경로로 설정됩니다. 나는 JavaPlanner
패키지 구조를 알고 있으므로 getParentFile
적절한 수의 프로젝트 루트를 찾은 다음 bin /을 추가하십시오.
25 번 줄에서 JAR에서 응용 프로그램을 실행하고있는 것으로 나타났습니다. 블록은 실행 가능한 JAR이 들어있는 폴더의 경로를 가져옵니다.
분명히이 코드는 사용자의 목적에 맞게 100 % 수정 된 것은 아닙니다 (가장 구체적으로는 패키지 구조에 대해 특정 횟수만큼 getParentFile
이라고 부릅니다).하지만 도움이 될 것 같습니다.
위의 코드의 목적은 내 응용 프로그램에 맞는 올바른 리소스 파일을 찾을 수있게하는 것이 었습니다. 프로덕션 버전에서는 JAR 만 사용할 수 있지만 일부 코드를 테스트 할 때마다 JAR을 다시 빌드하지 않으려 고했지만 리소스 파일 을 복제하지 않았습니다. 나는 빈/폴더를 클래스 파일로 오염시키고 싶지 않았다. 왜냐하면 bin /에있는 모든 것이 사용자에게 보내지기 때문이다.
경로를 하드 코딩하지 않으려 고합니다. 내가 동적으로 경로를 찾을 싶습니다. – Jon
@ 존 : 편집을 참조하십시오. 이전에 실행 위치와 관련된 특정 폴더를 찾기 위해 사용한 코드가 포함되어 있습니다. 도움이 될 것입니다. –
만 패키지에 클래스를 찾고 있다면, 왜 이렇게할까요
Package.getPackage(String name)
Package.getPackages()
기타 배경 : 테스트 방법에서 루프 할 때 필요한 여러 파일이 있습니다. 일부 파일은 Y 패키지에 있고 일부는 Z 패키지에 있습니다. 클래스 파일이 아니며 단지 데이터 파일입니다. 패키지 Y와 패키지 Z의 모든 파일을 반복 할 수 있기를 원합니다. – Jon
을 고려? – Maz
기타 배경 : 테스트 메소드에서 루프 처리해야하는 여러 파일이 있습니다. 일부 파일은 Y 패키지에 있고 일부는 Z 패키지에 있습니다. 클래스 파일이 아니며 단지 데이터 파일입니다.패키지 Y와 패키지 Z의 모든 파일을 루프 할 수 있기를 원합니다. – Jon