You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Apache-commons net连接FTP可列文件可上传但无法下载txt文件如何解决

问题排查与解决方案

根因定位

核心错误为方法调用时参数顺序传反,对应逻辑如下:
你定义的downloadFiles方法参数顺序为:

public static FTPFile[] downloadFiles(String host, String username, String password, int port, String localFilePath, String remoteFilePath)

第5位为本地保存路径localFilePath,第6位为FTP服务器远程文件路径remoteFilePath。
但你调用时第5位传入的是FTP上的文件名ambil.txt//ambil.txt,第6位传入的是本地存储路径/storage/emulated/0/Download/hasil.txt,参数完全颠倒。
因此代码执行到创建本地文件流的逻辑时,实际是尝试在安卓系统根目录创建/ambil.txt,而系统根目录属于只读分区,自然抛出Read-only file system的报错,和FTP服务器权限、安卓存储权限无关。

修复方法

调整调用时的参数顺序,将本地保存路径放在第5位,远程文件路径放在第6位即可:

对应第一种调用场景(远程文件为FTP相对路径ambil.txt)

// Try downloading
MainAppUtility.downloadFiles(editTextIP.getText().toString(), String.valueOf(editTextUsername.getText()), String.valueOf(editTextPassword.getText()), 21,"/storage/emulated/0/Download/hasil.txt","ambil.txt");

对应第二种调用场景(远程文件为FTP绝对路径/ambil.txt)

// Try downloading
MainAppUtility.downloadFiles(editTextIP.getText().toString(), String.valueOf(editTextUsername.getText()), String.valueOf(editTextPassword.getText()), 21,"/storage/emulated/0/Download/hasil.txt","/ambil.txt");

额外优化建议

  • 方法参数可增加明确的注解约束,或者保持参数顺序和Apache Commons Net原生API一致,避免后续再出现参数传反的问题
  • 方法内创建本地文件前,先判断本地路径的父目录是否存在,不存在则先创建,避免目录不存在导致的下载失败
  • 下载逻辑执行完成后,新增FTP连接的logout和disconnect逻辑,避免连接泄漏

内容的提问来源于stack exchange,提问作者Plain_Dude_Sleeping_Alone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 04:57:01