Я запускаю на машине 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.
В 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 с моего рабочего стола:
Я просто исполнил тот же код 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
Вы пишете 'c.cd ("/Inbox ");', но когда вы sftp, вы делаете 'cd Inbox /'. Вы пробовали исключить ведущую косую черту в вызове 'cd' в java? 'c.cd (« Входящие »);' –
Просто попробовал «Входящие», «Входящие», «Входящие /», «/ Входящие /», «./Inbox» .. все они задают ту же проблему. Также попробовал разные папки в SFTP с теми же результатами. – user1261620
Вы пробовали использовать абсолютный путь к папке '/ Inbox', а не относительной? –