gpt4 book ai didi

java - jython 从 jar 文件中读取文件

转载 作者:行者123 更新时间:2023-12-01 13:00:26 27 4
gpt4 key购买 nike

我有 jar/zip 文件,其中包含在类文件夹下名为 Accord.properties 的属性文件。

Zip/Jar file:
+classes
+accord.properties

我正在读取文件:

from java.util import Properties
from java.io import File, FileInputStream
def loadPropsFil(propsFil):
print(propsFil)
inStream = FileInputStream(propsFil)
propFil = Properties()
propFil.load(inStream)
return propFil
pFile = loadPropsFil("/accord.properties")
print(pFile)

在 Tomcat 服务器中运行时,出现错误:

Exception stack is: 1. accord.properties (No such file or directory) (java.io.FileNotFoundException) java.io.FileInputStream:-2 (null) 
2. null(org.python.core.PyException) org.python.core.Py:512 (null)
3. java.io.FileNotFoundException: java.io.FileNotFoundException: accord.properties (No such file or directory) in <script> at line number 34 (javax.script.ScriptException)

尝试过

pFile = loadPropsFil("accord.properties")

pFile = loadPropsFil("classpath:accord.properties")

同样的错误。

编辑

inStream = ClassLoader.getSystemClassLoader().getResourceAsStream("accord.properties")
strProp = Properties().load(inStream) # line 38
options.outputfile=strProp.getProperty("OUTPUT_DIR")

此处 inStream 给出 null 并导致 NullPointer 异常。

错误:

 java.lang.NullPointerException: java.lang.NullPointerException in <script> at line number 38 (javax.script.ScriptException)

最佳答案

您无法像使用 FileInputStream 访问普通文件一样访问 JAR 中的文件。相反,您需要使用 Class.getResourceAsStream() 将它们作为资源进行访问。尝试这样的事情:

inStream = ClassLoader.getSystemClassLoader().getResourceAsStream("accord.properties")
<小时/>

我很高兴您能够弄清楚如何调用 getResourceStream。我不确定“标记无效”错误是什么意思。这对我来说效果很好:

    $ CLASSPATH=hello.jar:$CLASSPATH jython
Jython 2.5.3 (2.5:c56500f08d34+, Aug 13 2012, 14:48:36)
[Java HotSpot(TM) 64-Bit Server VM (Oracle Corporation)] on java1.8.0
Type "help", "copyright", "credits" or "license" for more information.
>>> from java.lang import ClassLoader
>>> from java.io import InputStreamReader, BufferedReader
>>> inStream = ClassLoader.getSystemClassLoader().getResourceAsStream("hello.txt")
>>> reader = BufferedReader(InputStreamReader(inStream))
>>> reader.readLine()
u'Hello!'

由于 hello.jar 包含文件 hello.txt,其中包含单行 Hello!,以上是我的预期输出。

关于java - jython 从 jar 文件中读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23554036/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com