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)
Другие вопросы по тегам