【问题标题】:Can you access files on the remote FTP server with RandomAccessFile?您可以使用 RandomAccessFile 访问远程 FTP 服务器上的文件吗?
【发布时间】:2019-10-28 17:02:19
【问题描述】:

我正在尝试使用 Apache Commons Net 库读取 FTP 远程服务器上的文件。

retrieveFileStream 返回InputStream 并放入BufferedReader

但是,我想使用RandomAccessFile(使用seek() 方法)。

我想将Inputstream 设为RandomAccessFile

有可能吗?

FTPClient ftp = new FTPClient();
InputStream in = ftp.retrieveFileStream(remote_file_name);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in, "UTF-8"));

【问题讨论】:

  • 没有。您无法将 InputStream 转换为 RandomAccessFile。 FTP 不提供任何其他帮助。
  • 如果我在 FTP 远程服务器上读取文件,我不能使用 RandomAccessFile 吗?
  • 这看起来像 XY problem --- 告诉我们您要实施什么,而不是询问您在尝试实施时遇到的问题。
  • @user207421 虽然您确实无法将 InputStream 转换为 RandomAccessFile,但 “FTP 没有提供任何其他帮助” 是不正确的(更不用说你/我们真的不知道 OP 想要什么)。
  • @MartinPrikryl 鉴于他要求一种将 FTP 输入流转换为RandomAccessFile 的方法,他想要什么非常清楚。使用RandomAccessFile 类通过FTP 进行随机访问,可能是读/写。如果你认为 FTP 提供了一些有用的东西,你为什么不确切地说它是什么?

标签: java ftp inputstream apache-commons-net randomaccessfile


【解决方案1】:

如果您想从某个偏移量开始读取远程文件,请使用FTPClient.setRestartOffset。 FTP 服务器需要支持REST 命令(大部分都支持)。

ftp.setRestartOffset(offset);
InputStream in = ftp.retrieveFileStream(remote_file_name);
// Now you can read as many bytes as you need from 'in'

如果不想将文件读到底,又想将连接重用于其他操作,则需要调用FTPClient.abort


(您不能将InputStream 转换为RandomAccessFile,也不能将RandomAccessFile 用于FTP 服务器上的文件)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    相关资源
    最近更新 更多