Ich bin auf einem Linux-Computer ein Java-Programm ausgeführt, das jcraft.jsch Bibliothek verwendet, um eine Verbindung zu einem externen SFTP-Server herzustellen. Der Code sieht so aus:Ordner existiert nicht, wenn Verzeichnis mit jcraft.jsch geändert wird
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
Aus irgendeinem Grund, wenn ich das Verzeichnis wechseln Befehl ausführen „c.cd“ Ich bekomme:
4: Folder not found: /drwxr-x--- 2 ftpadmin ftpadmin 0 Jan 01 1970 /Inbox
Es ist seltsam, weil das Angebot (c.ls) davon Ordner löst keine Ausnahme aus.
Außerdem, wenn ich von der Kommandozeile vom gleichen Linux-Server lftp kann ich problemlos cd.
Die Stacktrace zeigt auf ein _STAT Verfahren innerhalb des CD-Verfahrens.
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)
Die Ordnerstruktur der Remote-Site sieht wie folgt aus, wenn ich Filezilla von meinem Desktop mit Verbindung:
gerade ausgeführt ich den gleichen Java-Code auf meinem Windows-Desktop-Rechner und die Der Befehl cd hat funktioniert. (Windows-Computer läuft JDK 1.6.0_29, während der Linux-Server JRE 1.6.0.27 ausführt)
Funktioniert jsch auf Client-Seite auf Betriebssystemebene auf einer anderen Bibliothek?
Haben Sie eine Idee, wie Sie vorgehen, um dieses Problem zu beheben?
wichtig UPDATE
konnte ich den Fehler auf meiner Dev-Maschine reproduzieren. Es hat damit zu tun, dass jsch-Versionen verwendet werden. Der Linux-Server verwendet jsch-0.1.31, während der Dev-Rechner jsch-0.1.52 verwendet. Es scheint, dass alles, was den Fehler verursacht, bereits in der Version 0.1.52 gelöst wurde. Wooot! Wooot! Endlich!
Danke
Sie schreiben 'c.cd ("/Inbox ");', aber wenn Sie sftp in, tun Sie 'cd Inbox /'. Haben Sie versucht, den führenden Schrägstrich in Ihrem 'cd'-Aufruf in Java auszuschließen? 'c.cd (" Posteingang ");' –
Ich probiere es mit "Posteingang", "/ Posteingang", "Posteingang /", "/ Posteingang /", "./Inbox" .. alle von ihnen geben das gleiche Problem. Habe auch verschiedene Ordner im SFTP mit den gleichen Ergebnissen ausprobiert. – user1261620
haben Sie versucht, den absoluten Pfad zum Ordner '/ Inbox' anstelle des relativen zu verwenden? –