【问题标题】:can I download file from ftp without save it my directory first我可以从 ftp 下载文件而不先保存我的目录吗
【发布时间】:2023-04-10 19:31:02
【问题描述】:

我有一个页面下载,你要下载的文件必须先从其他服务器使用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/ 中,是否有可能?

【问题讨论】:

  • 是的。使用不同的 outputStream 然后是 FileOutputStream
  • @Jens 在这段代码中怎么做?你能给我解释一下吗?
  • 其中一个答案能解决问题吗?如果是这样,您能否通过单击左侧的复选标记将答案标记为正确。这样,它就不会再出现在未解决的问题列表中。

标签: java spring ftp


【解决方案1】:

您可以使用 ByteArrayOutputStream 代替 BufferedOutputStream。

ByteArrayOutputStream outputStream1 = new ByteArrayOutputStream();
boolean success = ftpClient.retrieveFile(remoteFile1, outputStream1);
String fileContent = outputStream1.toString("UTF-8");

【讨论】:

    【解决方案2】:

    要写入内存中的流,请使用: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) {}
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多