2014-01-21 3 views
2

지금은 수동으로 노래 파일 이름을 문자열 배열에 쓴 다음 문자열을 InputStream is = this.getClass().getResourceAsStream(filename);으로 보내 노래를 재생하고 있습니다.자바 프로젝트의 리소스 폴더에서 모든 파일 이름 가져 오기

노래를 추가 할 때마다 수동으로 배열에 입력 할 필요가 없도록 내 리소스 폴더의 모든 노래 이름을 반복하여 배열로로드합니다.

내 노래의 모든 resources 폴더에 있습니다

enter image description here

이 이름을 잡기 위해 자바 방법 또는 뭔가가 있나요?

.jar으로 내보낼 때 파일이 작동해야합니다.

내가 이런 식으로 사용할 수 있다고 생각 했나요?

InputStream is = this.getClass().getClassLoader().getResourceAsStream("resources/");

은에 대한 listFiles()이나 뭐 있습니까?

감사합니다.

답변

2

아니요, 클래스 경로가 Java에서 동적이기 때문에 아니오입니다. 추가 Jar는 패키지에 기여할 수 있으며, 클래스 로더는 상상할 수있는만큼 역동적 일 수 있으며 필요에 따라 클래스 나 리소스를 동적으로 만들 수도 있습니다.

특정 JAR 파일이 있고 그 JAR 파일 내의 경로를 알고있는 경우 해당 파일을 아카이브로 취급하고 java.util.jar.JarFile을 통해 액세스하면 파일의 모든 항목을 나열 할 수 있습니다.

JarFile jar = new JarFile("res.jar"); 
Enumeration<JarEntry> entries = jar.entries(); 
while (entries.hasMoreElements()) { 
    JarEntry entry = entries.nextElement(); 
    System.out.println(entry.getName()); 
} 

당신이 에브 게니 제안을 동적으로 파일 이름을 얻을 필요합니다 (JAR 자체 내에서 클래스에 의해, 예를 들어)이 JAR 파일 이름과 경로를 모르는 상태에서이 작업을 수행하려면

; 자신 만의 클래스 이름 (패키지 포함)을 사용하십시오. 스크린 샷은 기본 패키지에있는 것처럼 보이지만 나쁜 아이디어입니다.

+0

그래서 한 번에 하나의 파일 이름을 읽을 수 있지만 모든 파일 이름을 배열로 가져 와서'getResourceAsStream'으로 보내면 되나요? – Growler

+0

나는 당신을 올바르게 이해하는지 모르겠습니다. 물론 엔트리를 반복하고 리소스 식별자의 Array (또는 더 나은 데이터 구조)를 빌드 할 수 있습니다.'getResourceAsStream'는 단일 식별자만을 사용합니다. –

+0

그게 내가하고 싶은거야. 모든 노래 이름을 문자열로 가져 와서 내 문자열 배열에 넣고 싶습니다. 'getResourceAsStream'에 단일 경로로 원하는대로로드하십시오. 나는 단지'resources' 폴더에서 모든 노래 이름을 얻는 방법을 모른다. – Growler

0

당신은 여기에서이

Enumeration<URL> e = ClassLoader.getSystemResources("org/apache/log4j"); 
while (e.hasMoreElements()) { 
    URL u = e.nextElement(); 
    String file = u.getFile(); 
... 

file:/D:/.repository/log4j/log4j/1.2.14/log4j-1.2.14.jar!/org/apache/log4j

추출물 항아리 경로 같은 것을 시도하고 조직/아파치/log4j에 내용을 알고 JarFile 클래스를 사용할 수 있습니다. 이 압축 해제되어있는 경우

, 당신은 직선 경로를 얻을 File.listFIles

1

를 사용하여 클래스 경로-탐색기 1.0 즉 com.google.classpath.ClassPathFactory

<dependency> 
     <groupId>com.google.classpath-explorer</groupId> 
     <artifactId>classpath-explorer</artifactId> 
     <version>1.0</version> 
</dependency> 

예 사용합니다 :

ClassPathFactory factory = new ClassPathFactory(); 
String[] allFiles = factory.createFromJVM().findResources(resourceName, new RegExpResourceFilter(".*", ".*\\.mp3")); 

//.mp3 또는 .txt 또는 .json 등

관련 문제