kol*_*rie 6 filesystems jar jruby
我正在为我在JRuby中创建的库编写Java包装器,我无法读取JAR中的文件.
我已经打开了JAR,文件就在那里,位于JAR的根文件夹中.
但是,当我尝试运行时:
File.read("myfile.txt")
Run Code Online (Sandbox Code Playgroud)
它会引发以下错误:
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)
Run Code Online (Sandbox Code Playgroud)
我甚至试图使路径绝对(假设文本文件位于根目录,正在执行的ruby源位于lib/xmlcompare中),通过执行以下操作:
File.read("#{File.dirname(__FILE__)}/../../myfile.txt")
Run Code Online (Sandbox Code Playgroud)
但后来我得到:
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)
Run Code Online (Sandbox Code Playgroud)
我对如何使这项工作有任何想法?
正如欧内斯特所指出的,这可以用JRuby以Java方式完成:
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()
Run Code Online (Sandbox Code Playgroud)