Ich versuche Java zu verwenden, um eine Datei Zeile für Zeile zu lesen, was sehr einfach ist (es gibt mehrere Lösungen für diese auf stackoverflow.com), aber der Nachteil hier ist, dass die Datei auf einem Remote-Server befindet, und es Es ist nicht möglich, eine lokale Kopie zu erhalten (es handelt sich um eine riesige Sammlung von Millionen von Amazon-Rezensionen in einer einzigen .txt-Datei).Wie Java JSch-Bibliothek verwenden, um Remote-Datei zeilenweise zu lesen?
JSch kommt mit zwei Beispielklassen, die Dateien zu und von entfernten Hosts kopieren, nämlich ScpTo und ScpFrom. Ich bin daran interessiert, die Datei Zeile für Zeile vom Remote-Host zu lesen. ScpFrom würde versuchen, das Ganze in eine lokale Datei zu kopieren, was ewig dauern würde. Hier
ist ein Link zu ScpFrom: http://www.jcraft.com/jsch/examples/ScpFrom.java.html
ich Cargo-Kult dort den Code versuchen würde, und ändern Sie es dann eine Remote-Datei Zeile für Zeile zu lesen, anstatt in einer lokalen Datei zu schreiben, aber die meisten des Code ist Griechisch für mich, sobald der Autor ein Byte-Array deklariert und beginnt Bytes aus der Remote-Datei zu lesen. Ich gebe zu, das ist etwas, das ich fast nicht verstehe; BufferedReader bietet eine viel höherwertige Schnittstelle. Im Wesentlichen möchte ich dies tun: How to read a large text file line by line using Java?
außer mit einem BufferReader, die auch remote-Dateien Zeile für Zeile lesen können, wenn der Host-Name und Benutzer-Anmeldeinformationen (Passwort, etc.), z. B. RemoteBufferReader?
Dies ist der Testcode, den ich geschrieben habe; Wie lese ich Zeile für Zeile in der Remote-Datei mit JSCh? Verwendung von SFTP als scp oder reine ssh
public class test2
{
static String user = "myusername";
static String host = "[email protected]";
static String password = "mypasswd";
static String rfile = "/path/to/remote/file/on/remote/host";
public static void main(String[] args) throws FileNotFoundException, IOException, JSchException
{
JSch jsch=new JSch();
Session session=jsch.getSession(user, host, 22);
session.setPassword(password);
session.connect();
// exec 'scp -f rfile' remotely
String command="scp -f "+rfile;
Channel channel=session.openChannel("exec");
((ChannelExec)channel).setCommand(command);
// get I/O streams for remote scp
OutputStream out=channel.getOutputStream();
channel.connect()
//no idea what to do next
}
}
Ich würde 'cat' (auf dem Remote-Host) anstelle von' scp' verwendet. Dann lies einfach das stdout des Befehls Zeile für Zeile. – Rob
Sie können einen Eingangsstrom über sftp mit Jsch öffnen und lesen Sie diese Zeile für Zeile – nablex