2016-07-26 5 views
0

리소스로 내 프로젝트에 첨부 된 파일 집합이 있습니다. 이 파일에는 프로그램이 읽고 처리하는 데이터가 들어 있습니다.공백 및 키릴 기호로 된 리소스 파일 읽기

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();  
InputStream inputStream = classLoader.getResourceAsStream(filename);    
packageParameters = IOUtils.toString(inputStream, "UTF-8");      
inputStream.close();  

을 그리고 내가 좋아하는 특정 이름을 가진 파일을 읽으려고 할 때까지 모든 것이 괜찮 : 그건 내가 할 방법은이 자원을 찾을 수 있음을 의미

\sets\Тех. тип = 0 Сет. = 1 Комплект 1.qr 

getResourceAsStream 반환 null.

그럼, 질문 : 키릴 문자, 공백 및 특수 기호가 이름에 들어있는 파일을 어떻게 읽을 수 있습니까? 이름 인코딩 시도 - 도움이되지 않습니다. 생성자가 불법 심볼에 대한 예외를 throw 할 때이를 URI로 변환 할 수 없습니다.

감사합니다. 비슷한 답변을 분석하는 데 며칠을 소비했습니다. 여전히 해결 방법을 모릅니다.

+1

감사합니다. Nikolay, 질문 업데이트 중! –

+0

파일 이름 지정을 제어 할 수 있습니까? – injecteer

+0

아니요, 파일 이름 생성 방법에 영향을주지 않습니다. 나는 또한 그들을 개명하는 것을 생각했다. 하지만 프로그램 내에서 이름을 바꾸려면 리소스로 지정할 수 있어야합니다. 정확히 내가하려는 것입니다. –

답변

2

후행 슬래시를 제거하고 \/으로 대체하십시오.

나는 내용

123 

src\main\resources\sets에서 파일 Тех. тип = 0 Сет. = 1 Комплект 1.qr를 놓고이 나를

import org.apache.commons.io.IOUtils; 
import java.io.IOException; 
import java.io.InputStream; 

public class Application { 
    public static void main(String[] args) throws IOException { 
     String filename = "sets/Тех. тип = 0 Сет. = 1 Комплект 1.qr"; 
     ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
     InputStream inputStream = classLoader.getResourceAsStream(filename); 
     String packageParameters = IOUtils.toString(inputStream, "UTF-8"); 
     inputStream.close(); 
     System.out.println(packageParameters); // prints 123 
    } 
} 

에 대한 src\main\java\Application.java에있는이 클래스의 소스를 사용할 수 있습니다. 모든 pathes는 프로젝트의 루트 디렉토리에 상대적입니다.

+0

답변 해 주셔서 감사합니다. 이미 제안한 방법을 포함하여 다른 슬래시 유형으로 시도했습니다. 다시 한번 했는가?이 코드는 일반 파일을 성공적으로 처리하지만 InputStream은 여전히 ​​내 특정 파일에 대해 null입니다. 내가 Windows 시스템을 사용하여 응용 프로그램을 실행한다고 언급하는 것을 잊어 버렸습니다. 귀하의 측면에서 다르게 작동하는 이유가 될 수 있습니다. (Mac 또는 Linux를 사용하는 것 같습니다.) –

+0

@KonstantinDobroliubov 아니요, Windows를 사용합니다. 또한 ['ClassLoader' referencesse] (http://docs.oracle.com/javase/6/docs/api/java/lang/ClassLoader.html)에서 _ 자원 이름이 '/'로 분리 된 경로임을 선언했습니다. 자원을 식별하는 이름 ._ 디렉토리와 관련이있을 수 있습니까? 또는 심지어 파일의 이름이 프로그램 내에서 올바르지 않거나, 예를 들어 앞뒤에 공백이 있습니까? – NikolayKondratyev

+0

답변을 실제로 유효한 것으로 표시합니다. 그러나 파일 이름을 처리하는 방식에 문제가있었습니다. 잘못된 변환 작업의 결과로 잘 렸습니다. 모두들 감사합니다! 너는 내 하루를 보냈다. –