2016-07-30 65 views
1

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.

enter image description here

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:

enter image description here

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

+0

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 ");' –

+0

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

+0

haben Sie versucht, den absoluten Pfad zum Ordner '/ Inbox' anstelle des relativen zu verwenden? –

Antwort

1

Die Aktualisierung auf JSCH Version 0.1.52 behebt das Problem.

0

Versuchen Sie, Folgendes zu tun.

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

Versuchte das und es hat nicht funktioniert. – user1261620

+0

@ user1261620 läuft Ihr Programm im selben Verzeichnis wie das Verzeichnis 'Inbox'? Welchen Fehler hast du bekommen? –