For my application I need a way to get the InputStream of a binary file on a
FTPServer. What I did was :
// connect and get ftpFiles as an array
// for each ftpFile ...
InputStream is = ftp.retrieveFileStream(ftpFiles[i].getName());
However, this behaves erratically : sometimes the inputstream is correct and
sometimes it is null (and the ftpFile exists, no weird name or anything odd
After first blaming my FTPServer (I use GuildFTPd 0.9.9.13) I tried another
FTPServer (Serv-U 6.1), but this also had the same behavior.
Then I thought I might have to do with timing. So I tried Thread.sleep(xxx) on a
couple of locations but to no avail. In a last attempt (was getting pretty
desperate ) I rewrote my original line and replaced it by this :
ByteArrayOutputStream out = new ByteArrayOutputStream();
InputStream is = new ByteArrayInputStream(out.toByteArray());
And much to my surprise, it worked like a charm. Tested it a couple of times (on
both FTPServer products) and works perfectly.
So I'm guessing something is going wrong in your retrieveFileStream
implementation. Maybe something worth looking into ? (easiest fix : use the
ByteArrayOut/InputStream swap ).