android - 如何在 Android 上做一个简单的 ftp 获取文件

标签 android ftpwebrequest

我在任何地方都找不到文件的简单 FTP 访问示例,并且 FTPClient 类(有几个示例使用)没有出现在 Android 类索引中。我有 http 访问权限,但我如何进行简单的 FTP 获取?我只想下载(例如): ftp://tgftp.nws.noaa.gov/data/observations/metar/stations/KABQ.TXT 它不应该需要登录、更改目录等。 仅将该 URL 提供给 http 访问方法似乎不起作用。

这类似于以下问题: unable to read file from ftp in android?

我尝试了一个简单的:

  StringBuilder response = new StringBuilder();
  URLConnection ftpConn;
  try {
  URL netUrl = new URL("ftp://tgftp.nws.noaa.gov/data/observations/metar/stations/KABQ.TXT");
  ftpConn = netUrl.openConnection();
  BufferedInputStream bufRd = new BufferedInputStream(ftpConn.getInputStream());
  int temp;
  while ((temp = bufRd.read()) != -1) {
      response.append(temp);
  }
  bufRd.close();
  } catch (Exception e) {
      return "Failure";
  }

但是它在 getInputStream 上得到一个异常: 无法连接到服务器:无法配置数据端口

此外,必须有一种比逐字节提取数据更智能的方法将数据从流缓冲区中提取出来,不是吗?我也找不到。

最后,我需要同时进行 http 和 ftp 访问,有什么理由不对这两种访问类型都使用 URLConnection 吗?还是将 HttpConnection 用于 http 和 URLConnection 用于 ftp 更好?

谢谢!

最佳答案

哇!我终于搞定了。我放弃了在 webOS 和 WPF/C# 中工作的简单方法,您可以在其中执行 ftp:://...您必须使用 FTPClient 包。

修复库访问(项目 | 属性 | Java 构建路径 | 库 | 添加 JAR...)后,我摆弄了这些调用,直到它开始工作。这是我的 FTPClient 调用的顺序。在我将它设置为被动模式之前它不会工作。

  mFTPClient = new FTPClient();
  mFTPClient.connect("tgftp.nws.noaa.gov");      
  mFTPClient.login("anonymous","nobody");
  mFTPClient.enterLocalPassiveMode();
  mFTPClient.changeWorkingDirectory("/data/forecasts/taf/stations");
  InputStream inStream = mFTPClient.retrieveFileStream("KABQ.TXT");
  InputStreamReader isr = new InputStreamReader(inStream, "UTF8");

关于android - 如何在 Android 上做一个简单的 ftp 获取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7053513/

相关文章:

c# - 如何直接从 FTP 文件夹中的流创建和保存文件?

javascript - 从应用程序发送带有附件的电子邮件

c# - 当当前用户目录不同于 root 时,无法使用 ftp 方法重命名文件

.net - 如何使用 VB.NET 从 FTP 下载目录

c# - 当我尝试获取 FTP 上的文件大小时出现 550 错误

c# - 有没有其他方法可以在不使用 WebRequestMethods.Ftp.ListDirectory 方法的情况下测试 FTP 服务器的连接?

Android 4.2 - Environment.getExternalStorageDirectory().getPath() 行为

android - 在 android Lollipop 上显示 Toast 时出现 ArrayIndexOutOfBoundsException

java - 无法获取位置坐标?经纬度

android - 如何在操作栏菜单中将边距应用于 actionViewClass