Eh già, tu dici all'ftp channel dove scaricare e lui scarica. Allora vai di pipe. Puoi leggere quello che l'ftp client scarica su un OutputStream che gli rifili tu, usando un BufferedReader in lettura con 'sta Pipe. Una Pipe è un'affare che connette un flusso di scrittura ad uno di lettura e viceversa. Ad esempio:
Pipe pipe = Pipe.open();
SourceChannel inputChannel = pipe.source();
SkinChannel outputChannel = pipe.skin();
Qui quello che scrivi su outputChannel è leggibile tramite inputChannel. Il client vuole un output stream, quindi trasformi outputChannel in un OutputStream:
Pipe pipe = Pipe.open();
SourceChannel inputChannel = pipe.source();
SkinChannel outputChannel = pipe.skin();
OutputStream outputStream = Channels.newOutputStream(outputChannel);
Questo outputStream è quello che passi all'ftp client. Per leggere quello che arriva all'inputChannel con un BufferedReader fai una trasformazione di questo tipo:
Pipe pipe = Pipe.open();
SourceChannel inputChannel = pipe.source();
SkinChannel outputChannel = pipe.skin();
OutputStream outputStream = Channels.newOutputStream(outputChannel);
InputStream inputStream = Channels.newInputStream(inputChannel);
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader reader = new BufferedReader(inputStreamReader);
E questa è la connessione di base. A questo punto devi invocare il metodo download ma c'è un problema: è bloccante. Cioè se io dico:
client.download(nome_file, outputStream, boh);
il client non molla la linea finchè non ha terminato di scrivere e non hai modo di leggere alcunchè. A seconda di cosa vuoi fare può darsi che tu debba far partire il metodo download in un thread a parte o scaricare il reader da un thread a parte. Probabilmente la prima, cioè dirai:
Codice:
new Thread() { public void run() {
client.download(nome_file, outputStream, boh);
}}.start();
Così puoi scrivere subito dopo, in ipotesi:
while(reader.hasNextLine()) { pippo }
e avrai i tuoi byte.