Android - 如何从ftp获取一串txt文件?

时间:2017-04-08 22:52:39

标签: java android ftp

我的英语并不完美,但我希望它可以帮助一些试图解决这个问题的人; - )

我的问题

我正在学习Android编程,我希望你们能帮助我。

我正在尝试从ftp服务器的txt文件中获取字符串。我的字符串被称为“内容”,我试图用我的“texto”TextView显示它。 我正在使用FTPClient来访问ftp服务器。

这是我在MainActivity类中的方法:

public void get_txt() throws MalformedURLException {

    FTPClient ftpClient = new FTPClient();
    try {
        ftpClient.connect("my.ftp.url", 21);
        ftpClient.enterLocalPassiveMode();
        ftpClient.login("my_user", "my_password");


        InputStream inStream = ftpClient.retrieveFileStream("teste.txt");
        InputStreamReader isr = new InputStreamReader(inStream, "UTF8");

        String contents = isr.toString();
        texto.setText(contents);
        barra.setEnabled(false);
        ftpClient.disconnect();

    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }

谢谢,我希望你能帮助我:)。

编辑1:我忘了提及。我的应用运行正常,问题是TextView永远不会改变。

1 个答案:

答案 0 :(得分:1)

最终和工作代码(我希望它可以帮助你)

最后,在几小时后,我设法做到了!对于那些需要答案的人来说,这是:

public class Principal extends AppCompatActivity {

    public static TextView texto;
    String contents;
    ProgressBar barra;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_principal);
        texto = (TextView) findViewById(R.id.texto);
        TarefaDownload download = new TarefaDownload();
        download.execute();
}

上面的代码是我的MainActivity(我称之为"校长"这里)。我在那里只创建了一个TextView,然后我安装了我的AsyncTask类,名为" TarefaDownload"。这个类是一个私有类,其中放置了访问ftp的所有逻辑。现在让我们看看这个类代码。

private class TarefaDownload extends AsyncTask<Void, Void, Void> {
    @Override
    protected void onPreExecute() {
    }

    @Override
    protected Void doInBackground(Void... params) {
        FTPClient ftpClient = new FTPClient();
        try {
            ftpClient.connect("my_ftp_link_here", 21);
            ftpClient.enterLocalPassiveMode();
            ftpClient.login("my_user_login_here", "my_password_here");
            ftpClient.changeWorkingDirectory("/");

            InputStream inStream = ftpClient.retrieveFileStream("teste.txt");
            InputStreamReader isr = new InputStreamReader(inStream, "UTF8");


            int data = isr.read();
            contents = "";
            while(data != -1){
                char theChar = (char) data;
                contents = contents + theChar;
                data = isr.read();
            }

            isr.close();

            ftpClient.disconnect();

        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        texto.setText(contents);
    }
}

所以,基本上我试图从名为&#34; teste&#34;的txt文件中读取单行字符串。方法&#34; doInBackground&#34;在后台运行所有内容(不是吗?),所以访问ftp的所有代码都必须到那里。 然后我创建了一个名为&#34; contents&#34;的字符串,开始从InputStreamReader读取字符(每次一个)并存储在字符串中。您必须注意到String内容正在此方法中使用,但它属于我的MainActivity,因此我可以在AsyncTask类之外访问它。最后,当de doInBackground方法完成时,&#34; onPostExecute&#34;调用methos并将TextView的文本设置为我的String值的值。

这就是全部!您可能会注意到您必须在Manifest文件上添加INTERNET权限(或者您将无法访问ftp服务器):

 <uses-permission android:name="android.permission.INTERNET" />

就是这样,您的应用应该从ftp服务器读取数据!