如何在Android上实现一个简单的ftp获取文件
我在任何地方都找不到一个简单的文件FTP访问的例子,而且FTPClient类(有几个例子使用)没有出现在Android类索引中。我已经有了http访问功能,但是如何实现简单的FTP访问呢?我只想下载(例如): 它不需要登录、更改目录等。 仅仅将该URL提供给http访问方法似乎不起作用 这与以下问题类似: 我尝试了一个简单的方法:如何在Android上实现一个简单的ftp获取文件,android,ftpwebrequest,Android,Ftpwebrequest,我在任何地方都找不到一个简单的文件FTP访问的例子,而且FTPClient类(有几个例子使用)没有出现在Android类索引中。我已经有了http访问功能,但是如何实现简单的FTP访问呢?我只想下载(例如): 它不需要登录、更改目录等。 仅仅将该URL提供给http访问方法似乎不起作用 这与以下问题类似: 我尝试了一个简单的方法: StringBuilder response = new StringBuilder(); URLConnection ftpConn; try {
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?或者对http使用HttpConnection和对ftp使用URLConnection更好
谢谢 呼!我终于成功了。我放弃了在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");
我还在网上的某个地方找到了“逐字节”问题的答案。这似乎可以将InputStream类型直接转换为字符串类型:
String theStr = new Scanner(inStream).useDelimiter("\\A").next();
我还寻找了一个不使用第三方LIB的简单ftp下载示例。没有找到任何,所以将我的解决方案发布在这里 默认情况下,URLConnection使用用户名“anonymous”和空密码,这是许多ftp服务器不接受的,因为它们需要电子邮件作为“anonymous”的密码 要在应用程序中使用以下代码,只需添加try..catch,并确保从流读取不会阻塞UI线程
URL url = new URL("ftp://ftp.mozilla.org/README");
URLConnection cn = url.openConnection();
cn.setRequestProperty ("Authorization", "Basic " + Base64.encodeToString("anonymous:a@b.c".getBytes(), Base64.DEFAULT));
final File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
FileOutputStream fos = new FileOutputStream(dir.getPath() + "/README");
InputStream is = cn.getInputStream();
int bytesRead = -1;
byte[] buf = new byte[8096];
while ((bytesRead = is.read(buf)) != -1) {
fos.write(buf, 0, bytesRead);
}
if(is != null)is.close();
if(fos != null){ fos.flush(); fos.close(); }
希望这能为您节省一些时间。您的清单中是否有internet使用权限?是的,我花了几个小时在这上面,这在几个小时前是一个很好的猜测。:-)我确实使用了http,但没有使用ftp。我还注意到,如果我在模拟器上将该URL键入谷歌,它会显示“网页不可用”,并且在普通浏览器中。如果我直接在浏览器窗口中键入该URL,它似乎只需要50个字符,不会占用全部时间。模拟器中有这些bug吗?请帮助!或者,如果ftp在Eclipse emulator上不起作用,请让我知道这一点,并提供解决方法的建议。它在真正的硬件上工作吗?看起来我可以在同一个调用中组合目录路径和文件:InputStream inStream=mFTPClient.retrieveFileStream(“/data/forecast/taf/stations/KABQ.TXT”);我正试图做与你完全相同的事情,只是用不同的电台。我们能看看你的密码吗?