Jython将java File对象的数组从python发送到java类

时间:2015-10-11 18:37:40

标签: java python jython

我有我认为是python字符串问题。目标是从python / Jython向java类发送一个File对象数组。我收到与发送到File构造函数的字符串路径相关的错误。我相信这是因为我似乎无法摆脱双斜线。下面的python代码:

from java.io import File
from jarray import array

myPath ='C:\\something\\somethingElse'
onlyfiles = [ abspath(join(myPath,f)) for f in listdir(myPath) if isfile(join(myPath,f))]

jythonArray = array(onlyfiles, String)
temp=array(onlyfiles,File)

我收到错误“TypeError:无法将'C:\ ...'转换为Java.io.File” 我也尝试过.replace('\\','\')在理解中无济于事。当我只输入字符串中的完整路径并将其发送到java.File对象时,它就可以工作。问题似乎是我无法摆脱使用理解的路径中的\。任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

这里的问题是onlyfiles是一个字符串列表(<type 'str'>),而不是文件列表。回想一下,通常在Python文件路径中只是作为字符串处理,os.path.*方法接受一个字符串并返回一个字符串。

因此,您需要从字符串中创建Java File。一种方式是这样的:

onlyjavafiles = [File(f) for f in onlyfiles]

因此,完整的示例如下所示(注意我添加了缺少的导入):

from java.io import File
from java.lang import String
from jarray import array, zeros
from os import listdir
from os.path import isfile, join, abspath

myPath = '/tmp'
onlyfiles = [abspath(join(myPath, f)) for f in listdir(myPath) if isfile(join(myPath, f))]
onlyjavafiles = [File(f) for f in onlyfiles]

jythonArray = array(onlyfiles, String)
temp = array(onlyjavafiles, File)