2011-03-31 4 views
6

JRuby에서 만든 라이브러리의 Java 래퍼로 작업 중이며 JAR 내에있는 파일을 읽을 수 없습니다.JRuby를 사용하여 Jar 파일을 읽는 방법

JAR을 이미 열었으며 파일이 JAR의 루트 폴더에 있습니다.

C:\temp>java -jar c:\libraries\XmlCompare.jar 
file:/C:/libraries/XmlCompare.jar!/lib/xmlcompare/app.rb:19:in `initialize': 
No such file or directory - myfile.txt (Errno::ENOENT) 

심지어 텍스트 파일에 있음을 주어진 절대 경로를 (만들기 위해 노력했다 :

File.read("myfile.txt") 

그것은 다음과 같은 오류가 발생합니다 : 내가 실행하려고하지만

, 루트 및 실행중인 루비 소스가 lib/xmlcompare 내부에 있음) :

File.read("#{File.dirname(__FILE__)}/../../myfile.txt") 

그렇다면 얻으십시오 :

C:\temp>java -jar c:\libraries\XmlCompare.jar 
file:/C:/libraries/XmlCompare.jar!/lib/xmlcompare/app.rb:19:in `initialize': 
No such file or directory - 
file:/C:/libraries/XmlCompare.jar!/lib/xmlcompare/../../myfile.txt 
(Errno::ENOENT) 

어떻게하면이 작업을 할 수 있습니까?

답변

5

, 이것은 JRuby에서의 자바 방법으로 수행 할 수 있습니다 : 나

f = java.lang.Object.new 
stream = f.java_class.resource_as_stream('/myfile.txt') returned nil. 

이 길을 따라 들어

require 'java' 
require 'XmlCompare.jar' 

f = java.lang.Object.new 
stream = f.java_class.resource_as_stream('/myfile.txt') 
br = java.io.BufferedReader.new(java.io.InputStreamReader.new(stream)) 
while (line = br.read_line()) 
    puts line 
end 
br.close() 
+0

이것이 작동하지 않는다면 jar의 압축을 풀고 structor 디렉토리를 살펴보십시오. jar의 이름을'resource_as_stream' 메소드 앞에 추가해야 할 수도 있습니다. 예를 들어'... resource_as_stream ('/ my_jar/myfile.txt')' –

+1

'java.lang.Object.java_class.resource_as_string ('/ myfile.txt')'는 똑같은 방식으로 작동해야합니다. –

1

Java의 경우, Class.getResourceAsStream()을 사용하여 jar 파일을 읽습니다. 나는 JRuby에 대해 모른다.하지만 그게 네가해야 할 일이고, Java로 돌아가서 (작동하지만) getResource() 호출 중 하나에서 InputStream을 얻는다고 생각한다. jar 항목은 이 아니며 Java에서 파일로 액세스 할 수있는이 아니므로 JRuby에서 액세스 할 수있을 것으로 기대하지는 않습니다. 어니스트는 지적

+0

감사했다 응답. 그러나 나는 그렇게 확신하지 못한다. 제 생각에는 JRuby가 작동하도록 만드는 마법의 방법이 있습니다. 따라서 템플릿이 가득한 Rails 애플리케이션을 사용하여 서버에 자체 WAR을 사용하여 배포하는 방법을 생각해보십시오. 그것이 내가 이해할 필요가있는 것입니다. – kolrie

0

은 루비에서 잘

stream = self.to_java.get_class.get_class_loader.get_resource_as_stream('myfile.txt') 
+0

'self.to_java. get_class.get_class_loader'는 jruby-9.0.5.0에서'nil'을 리턴합니다. – paul

관련 문제