2010-07-13 7 views
2

필자는 fileWriter에서 파일을 사용할 때 전에는 효과가 있었지만 지금은 파일 대신 getResourceAsStream을 사용하고 있기 때문에 어떻게 작동시킬 수 있습니까? 내가 받는다는 조립 플러그인 실행 가능한 단지를 만들 때 항아리에 더 SRC/메인/자원이 없기 때문에 나는이를 변경했다FileWriter 및 Java의 InputStream

InputStream is = getResourceAsStream("filename"); 
FileWriter fstream = new FileWriter(is, true); 

통과 이제

FileWriter fstream = new FileWriter(new File("filename"), true); 

,

편집 :

카사 블랑카 덕분에 내 실수를 지적 다른, 후속 :

원본 콘텐츠를 유지하면서 파일에 쓸 필요는 있지만 파일에 추가해야합니다. 그리고 나는 물론 내가 쓰고있는 파일을 알아야한다.

답변

3

InputStream은 입력 스트림을 나타내므로 출력에 적합하지 않습니다. Inputstream에 쓸 수 없습니다. getResourceAsStream에 대한 스트림을 반환합니다. (읽기 전용) 리소스에 쓰기위한 것이 아닙니다.

저는 ClassLoader을 통해로드 된 리소스에 쓰기 쉬운 방법이 없습니다. 한 가지 해결책은 Properties으로 읽은 다음 store 메서드를 사용하여 리소스 파일에 쓰고 다른 방법으로 출력 스트림을 얻는 것입니다. 클래스 로더를 사용하여 리소스 파일의 URI를 얻을 수 있지만 직접 서명 할 수 있다는 보장은 없습니다 (예 : 서명 된 jar 파일에 번들 된 경우).

+0

나는 그것을 알아낼 수 있었지만 어떤 클래스가 writting을위한 자원을 얻는데 사용해야합니까? –

+0

파일에 실제로 쓰려면 [findResource] (http://download.oracle.com/docs/cd/E17476_01/javase/1.4.2/docs/api/java)를 사용하여 리소스 URI를 가져옵니다. /lang/ClassLoader.html#findResource(java.lang.String))을 작성한 후 작성하십시오. – tonio

+0

+1 자세한 설명을 위해 getClass.getClassLoader()를 시도해보십시오. findResouce ("/ Myfile.txt"); findResource가 존재하지 않는 것처럼 컴파일 오류가 다시 발생합니다.이 문제는 무엇입니까? –

3

우선 스트림에 쓰려면 파일 작성자가 아닌 일반 스트림 작성기가 필요합니다. 둘째, 쓰기 란 출력을 의미하므로 출력기가 필요합니다. 그래서 당신이 찾고있는 클래스는 OutputStreamWriter입니다.

getResourceAsStream 당신이 단지 당신이 그러한 InputStreamReader 같은 클래스를 사용할 수 있습니다 의미을 읽기 위해 사용할 수있는 InputStream 반환합니다.

업데이트 :

이미, 파일에 추가 FileWriter를 사용하기위한 올바른 코드가 있습니다. 그러나 getResourceAsStream은 읽기 전용 리소스를 반환하므로 데이터를 다시 쓰는 간단한 방법은 없습니다.

+0

답장을 보내 주셔서 감사합니다. OutputStreamWritter (분명히 OutputStream)에 무엇을 제공해야합니까? 어디에서 가져올 수 있습니까? 이 추가 파일을 지원합니까? 원래 내용을 제거하지 않고 파일을 추가해야합니다. –

0

문서를 읽는 경우 here을 보면 InputStream의 생성자가 없다는 것을 알 수 있습니다. 그게 내가 왜 컴파일되지 않는지. 당신이 아무것도 묻지 않았으니 그게 전부입니다.

+0

질문을 잊어 버렸습니다. 어떻게 OutputStream을 얻을 수 있습니까? OutputStreamWritter에 사용 하시겠습니까? –