2017-06-23 2 views
0

Ich soll eine Verbindung zu einem Unix-Server herstellen, dann zu dem bestimmten Ordner (der Zugriffsbeschränkungen hat) gehen und die Dateidetails von dort abrufen. Für den gleichen, der Code, den ich geschrieben habe, istUnix-Befehle werden, cd und ls -la über Java-Code ausgeführt werden

try{ 

      Session session = new JSch().getSession("username", "host"); 
      session.setPassword("password"); 
      java.util.Properties config = new java.util.Properties(); 
      config.put("StrictHostKeyChecking", "no"); 
      session.setConfig(config); 
      session.connect(); 

      Channel channel=session.openChannel("exec"); 


      //channel.setInputStream(null); 




      ((ChannelExec)channel).setCommand("cd a/b/node01/c.ear && ls -la"); 
      channel.connect(); 
      channel.run(); 
      InputStream in = channel.getInputStream(); 

      System.out.println(channel.isConnected()); 

      byte[] tmp = new byte[1024]; 
      while (true) 
      { 
       while (in.available() > 0) 
       { 
       int i = in.read(tmp, 0, 1024); 
       if (i < 0) 
        break; 
       System.out.print(new String(tmp, 0, i)); 
       } 
       if (channel.isClosed()) 
       { 
       System.out.println("exit-status: " + channel.getExitStatus()); 
       break; 
       } 

      } 



      channel.disconnect(); 
      session.disconnect(); 
     } 
     catch(Exception exception){ 
      System.out.println("Jiska darr tha whi hua "+exception); 
     } 

Ich bekomme nicht die Liste der Dateien, die an dem Standort vorhanden sind. Die Ausgabe, die ich erhalte ist

wahr

Ausfahrt-Status: 1

Wie kann ich die gewünschte Ausgabe zu erhalten?

+0

Ist "cd a/b/node01 /" wirklich auf ein gültiges Verzeichnis zeigt? Hast du absolute Pfade ausprobiert? – GhostCat

+0

Ich würde empfehlen, Kanalfehlerstrom zu lesen –

+0

Ja, das ist ein gültiges Verzeichnis. Wenn ich über Putty dasselbe mache, sehe ich nach dem Befehl ls -la die Dateien im Verzeichnis. –

Antwort

1

Verwenden Sie keine Shell-Befehle zum Abrufen von Dateiinformationen. Verwenden Sie SFTP!

Channel channel = session.openChannel("sftp"); 
channel.connect(); 

ChannelSftp c = (ChannelSftp)channel; 
java.util.Vector vv = c.ls("https://stackoverflow.com/a/b/node01/c.ear"); 

for (int i = 0; i < vv.size(); i++) 
{ 
    System.out.println(vv.elementAt(i).toString()); 
} 

Siehe http://www.jcraft.com/jsch/examples/Sftp.java.html


Code Bezüglich für "exec" Kanal:

+0

Es gibt mir keine solche Datei Fehler mit Status 2. –

+0

So ist der Pfad falsch. Vielleicht ist es tatsächlich wie '/ home/someuser/a/b/node01/c.ear'? Was sagt 'pwd' in PuTTY nachdem du' cd a/b/node01/c.ear' gemacht hast? –

+0

Putty sagt /cussdv01/a/b/node01/c.ear –

0

Ein mögliches Problem ist hier die Verwendung von in.available(). Er gibt die Anzahl der Bytes zurück, die gelesen werden können ohne zu blockieren.

Der richtige Weg, um einen Stream zu lesen, bis EOF ist:

byte[] buf = new byte[1024]; 
int len; 
while ((len=in.read(buf)) >= 0) { 
    // do something with buf[0 .. len] 
} 
Verwandte Themen