Jython отправляет массив объектов Java-файла в класс Java из Python
У меня есть то, что я считаю, проблема с питоном строки. Цель состоит в том, чтобы отправить классу Java массив объектов File из python/Jython. Я получаю сообщение об ошибке, связанной со строкой, отправленной в конструктор файлов. Я верю, что это потому, что я не могу избавиться от двойной косой черты. код 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. Кажется, проблема в том, что я не могу избавиться от \ N на пути, используя понимание. Любая помощь будет принята с благодарностью. благодарю вас!
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)