2016-07-30 2 views
1

Я запускаю на машине Linux программу Java, которая использует библиотеку jcraft.jsch для подключения к внешнему серверу sftp. Код выглядит следующим образом:Папка не существует при смене каталога с помощью jcraft.jsch

JSch jsch = new JSch(); 
Session session = null; 
Channel channel = null; 
ChannelSftp c = null; 

session = jsch.getSession(ftpUserName, ftpHost, ftpPort); 
session.setPassword(ftpPassword); 

channel = session.openChannel("sftp"); 
channel.connect(); 
c = (ChannelSftp)channel; 

fn = c.ls("/Inbox"); 
c.cd("/Inbox"); //-- this line throws an error 

По какой-то причине, когда я запускаю команду каталога изменить «c.cd» я получаю:

4: Folder not found: /drwxr-x--- 2 ftpadmin ftpadmin  0 Jan 01 1970 /Inbox 

Это странно, потому что перечисление (c.ls) этого папка не выбрасывает исключение.

Кроме того, если я lftp из командной строки с одного и того же Linux-сервера, я могу без проблем работать с cd.

enter image description here

В StackTrace указывает на метод _stat внутри метода кд.

at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2108) 
    at com.jcraft.jsch.ChannelSftp._stat(ChannelSftp.java:1676) 
    at com.jcraft.jsch.ChannelSftp.cd(ChannelSftp.java:290) 
    at BW_Utilities.ftp.test.testFtpJsch(test.java:81) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 

Структура папки удаленного сайта выглядит следующим образом при подключении с помощью Filezilla с моего рабочего стола:

enter image description here

Я просто исполнил тот же код Java на моем окна настольном компьютере а Команда cd работала. (Windows-машина запускает JDK 1.6.0_29, а сервер Linux запускает JRE 1.6.0.27)

Использует ли jsch какую-либо другую библиотеку на уровне ОС на стороне клиента?

Любая идея, как продолжить устранение этой проблемы?

важно UPDATE

Я был в состоянии воспроизвести ошибку на моем Dev машины. Это связано с использованием jsch-версий. Сервер linux использует jsch-0.1.31, в то время как dev-машина использует jsch-0.1.52. Кажется, что все, что вызывает ошибку, уже разрешено в версии 0.1.52. Wooot! Wooot! В заключение!

Thanks

+0

Вы пишете 'c.cd ("/Inbox ");', но когда вы sftp, вы делаете 'cd Inbox /'. Вы пробовали исключить ведущую косую черту в вызове 'cd' в java? 'c.cd (« Входящие »);' –

+0

Просто попробовал «Входящие», «Входящие», «Входящие /», «/ Входящие /», «./Inbox» .. все они задают ту же проблему. Также попробовал разные папки в SFTP с теми же результатами. – user1261620

+0

Вы пробовали использовать абсолютный путь к папке '/ Inbox', а не относительной? –

ответ

1

Обновление до версии jsch 0.1.52 исправляет проблему.

0

Попробуйте сделать следующее.

fn = c.ls("Inbox"); 
c.cd("Inbox"); 
+0

Пробовал, что и это не сработало. – user1261620

+0

@ user1261620 Ваша программа работает в том же каталоге, что и каталог с именем 'Inbox'? Какую ошибку вы получили? –