我在jar存档中有一个Jython代码库和几个文本文件。我正在使用脚本将它们全部打包到一个jar文件中以便于分发。我希望能够从jar文件中读取文本文件。我已经尝试了import语句命令:
fin = java.lang.ClassLoader.getResourceAsStream('jar中文本文件的路径')
并且它表示对于getResourceAsStream方法,预期有2个参数而不是1。我已经搜索了很多但是没有找到使用Jython做到这一点的明确方法。感谢。
答案 0 :(得分:2)
Jars只是zip文件,因此您可以使用zipfile
模块。我的示例是从清单文件中读取版本信息:
def get_ver(jar_file):
zf = zipfile.ZipFile(jar_file, 'r')
try:
lst = zf.infolist()
for zi in lst:
fn = zi.filename
if fn.lower().endswith('manifest.mf'):
try:
manifest_txt = str(zf.read(zi.filename), encoding='utf8')
except TypeError:
manifest_txt = zf.read(zi.filename)
lines = manifest_txt.split('\n')
for line in lines:
if 'Implementation-Version:' in line:
return line[23:].strip()
finally:
zf.close()
答案 1 :(得分:2)
您正在课堂上调用getResourceAsStream()
,而不是实例。这就是为什么会出现错误消息的原因。
如果您首先创建一个类加载器对象,然后在该对象上使用getResourceAsStream()
,它应该可以工作。像这样:
from java.lang import ClassLoader
from java.io import InputStreamReader, BufferedReader
loader = ClassLoader.getSystemClassLoader()
stream = loader.getResourceAsStream("org/python/version.properties")
reader = BufferedReader(InputStreamReader(stream))
line = reader.readLine()
while line is not None:
print line
line = reader.readLine()
输出:
# Jython version information
jython.version=2.5.3
jython.major_version=2
jython.minor_version=5
jython.micro_version=3
jython.release_level=15
jython.release_serial=0
jython.build.date=Aug 13 2012
jython.build.time=14:48:36
jython.build.hg_branch=2.5
jython.build.hg_tag=
jython.build.hg_version=c56500f08d34+
输出显示 jython.jar 中的 org / python / version.properties 文件的内容(程序运行时位于类路径上)。