从Jython中的jar读取文本文件

时间:2013-12-27 20:01:30

标签: jar jython

我在jar存档中有一个Jython代码库和几个文本文件。我正在使用脚本将它们全部打包到一个jar文件中以便于分发。我希望能够从jar文件中读取文本文件。我已经尝试了import语句命令:

fin = java.lang.ClassLoader.getResourceAsStream('jar中文本文件的路径')

并且它表示对于getResourceAsStream方法,预期有2个参数而不是1。我已经搜索了很多但是没有找到使用Jython做到这一点的明确方法。感谢。

2 个答案:

答案 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 文件的内容(程序运行时位于类路径上)。