【问题标题】:unable to read file from ftp in android?无法从android中的ftp读取文件?
【发布时间】:2011-08-10 10:42:44
【问题描述】:

我正在尝试从 ftp 服务器的文件中读取数据。当我从台式计算机运行时,这段代码在 java 中完美运行。我将相同的代码复制到android,但出现异常。例外是:

java.io.IOException:无法连接到服务器:无法检索文件:550

我不知道为什么当相同的代码在 java 中完美运行时会发生这种情况。 java代码是:

String s = "ftp://username:password@ftp.mysite.x10.mx:21/sg1996text.txt;type=i";
    URL u;
    String f="";
    try {
        u = new URL(s);
        URLConnection uc=u.openConnection();
        BufferedInputStream bis=new  BufferedInputStream(uc.getInputStream()); //This is where exception i raised.
        System.out.println("IS opened");
        int i;
        while((i=bis.read())!=-1)
            f=f+(char)i;
        System.out.println("File Read");
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 

【问题讨论】:

标签: android


【解决方案1】:

删除:

;type=i

来自您的网址:

 String s = "ftp://username:password@ftp.mysite.x10.mx:21/sg1996text.txt;type=i";

它适用于我的应用程序。

【讨论】:

    【解决方案2】:

    错误 550 通常表示“权限错误”,因此最可能的原因是用户名/密码不匹配(但请参见案例 #3)。

    但是,如果相同的代码在您的桌面上运行,用户名和密码应该是正确的。我看到的可能性是:

    • 您使用的包在桌面和Android之间不一样,Android版本无法正确解析用户名/密码。尝试嗅探 FTP 流量,或将 FTP 服务器地址更改为您控制的 FTP 服务器(您可以在桌面上临时部署一个),并验证用户名和密码是否传输正确。
    • 出现 DNS 错误,您的桌面(或 Android)未连接到 ftp.mysite.x10.mx,而是连接到其他地方,例如在 localhost 上进行开发安装(我做过一次;花了我一些时间才弄清楚)。尝试将服务器名称更改为其 IP 地址。
    • 与情况(1)一样,但解析错误是由 Android 包无法识别而桌面包识别的 TYPE I 规范(URL 末尾的“;type=i”)引起的。应该给出 500 错误,而不是 550;但是有几台服务器使用错误 550 表示找不到文件,并且软件包认为您想要的文件是 'sg1996text.txt;type=i' 而不是 'sig1996text.txt'。删除 ';type=i' 看看会发生什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多