我能直接从FTP下载文件而不先保存到本地目录吗?

7

我有一个下载页面,需要先从其他服务器使用FTP下载所需下载的文件。 我使用以下代码从FTP下载:

ftpClient.connect(server, port);
ftpClient.login(user, pass);
ftpClient.enterLocalPassiveMode();
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

String remoteFile1 = "/Users/A/file.txt";
File downloadFile1 = new File("/Users/B/Downloads/file.txt");
OutputStream outputStream1 = new BufferedOutputStream(new FileOutputStream(downloadFile1));
boolean success = ftpClient.retrieveFile(remoteFile1, outputStream1);
outputStream1.close();

如果我使用这个程序,我需要把file.txt文件保存在我的目录/Users/B/Downloads/中,然后我需要使用我的另一段代码从/Users/B/Downloads/下载file.txt文件。
如果我不想先把file.txt文件保存在我的目录/Users/B/Downloads/中,能否直接下载它?

1
是的,可以。使用一个不同的outputStream,而不是FileOutputStream。 - Jens
@Jens,这段代码该怎么做?你能给我解释一下吗? - viduka
其中一个答案解决了问题吗?如果是,请通过点击左侧的勾号将答案标记为正确。这样,它就不会再出现在未解决问题列表中。 - eztam
2个回答

4
您可以使用ByteArrayOutputStream替代BufferedOutputStream。
ByteArrayOutputStream outputStream1 = new ByteArrayOutputStream();
boolean success = ftpClient.retrieveFile(remoteFile1, outputStream1);
String fileContent = outputStream1.toString("UTF-8");

1

要在内存中向流写入内容,请使用:ByteArrayOutputStream

new ByteArrayOutputStream();

另一种方式:
BufferedReader reader = null;
String remoteFile1 = "/Users/A/file.txt";
try {
   InputStream stream = ftpClient.retrieveFileStream(remoteFile1);
   reader = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
   int data;
   while ((data = reader.read()) != -1) {
      //here, do what ever you want
   }
} finally {
   if (reader != null) try { reader.close(); } catch (IOException ex) {}
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接