FTPClient中使用retrieveFileStream方法的正确姿势

本文介绍了FTPClient的retrieveFileStream方法,用于从FTP服务器获取文件流。在读取完成后,需要关闭InputStream并调用completePendingCommand来确保文件传输成功。示例代码展示了如何将FTP文件流转存为本地文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FTPClient中使用retrieveFileStream方法的正确姿势

方法说明
[接口文档地址](https://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/ftp/FTPClient.html)
/**
* 获取文件流
* 返回一个InputStream,从中可以读取服务器中的命名文件。
* 如果当前文件类型为ASCII,则返回的InputStream会将文件中的行分隔符转换为本地表示形式。
* 当您完成对InputStream的读取时,必须关闭它。InputStream本身将负责在关闭时关闭父数据连接套接字。
* 要完成文件传输,必须调用completePendingCommand并检查其返回值以验证是否成功。
* 如果不这样做,后续命令可能会出现意外行为。
*
* @param fileName 文件名
* @return 文件流
*/
public InputStream retrieveFileStream(String remote) throws IOException {
        return this._retrieveFileStream(FTPCmd.RETR.getCommand(), remote);
    }
使用示例
/**
* 获取ftp文件流转为文件
*
* @return 文件列表
*/
public List<File> getFile() {
        FtpUtil ftpUtil = new FtpUtil(ftpProperty);
        String remotePath = "test";
      	List<File> files = Lists.newArrayList();
        FTPFile[] ftpFiles = ftpUtil.listFiles(remotePath);
        for (FTPFile ftpFile : ftpFiles) {
            //切换路径
            ftpUtil.changeWorkingDirectory(remotePath);
            String name = ftpFile.getName();
            log.info(name);
            //获取文件流
            InputStream inputStream = ftpUtil.retrieveFileStream(name);
            log.info("inputStream:{}", inputStream);
            //写入到文件
            File file = new File(name);
            File file1 = FileUtil.writeFromStream(inputStream, file);
            files.add(file1);
            try {
                //关闭流
                inputStream.close();
                ftpUtil.completePendingCommand();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return files;
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值