window搭建ftp服务器的步骤在这里,亲测可行:
http://blog.sina.com.cn/s/blog_3f7e47f20100haur.html
主要留意一下绑定的ip地址,以后要用到

要想从ftp服务器获取文件还要用到一个ftp4j的jar包。官网:http://www.sauronsoftware.it/projects/ftp4j/。可以把它先下载下来再参考/doc/manual.en.html来使用

1.把解压出来的jar文件放到libs目录中去

2.布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context="com.example.getpkgfromftp.MainActivity" >        <TextView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="@string/ip"        android:textSize="30sp" />        <TextView        android:id="@+id/pkgRoute"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="@string/port"        android:textSize="30sp" />        <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:focusable="true"        android:focusableInTouchMode="true" >        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="@string/username"            android:textSize="20sp" />        <EditText            android:id="@+id/etUserName"            android:layout_width="0sp"            android:layout_height="wrap_content"            android:layout_weight="1"            android:background="@android:drawable/edit_text"            android:hint="@string/username"            android:text="@string/user"            android:textSize="20sp" />        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="@string/_suffix"            android:textSize="20sp" />    LinearLayout>        <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:focusable="true"        android:focusableInTouchMode="true" >        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="@string/pwd"            android:textSize="20sp" />        <EditText            android:id="@+id/etPwd"            android:layout_width="0sp"            android:layout_height="wrap_content"            android:layout_weight="1"            android:background="@android:drawable/edit_text"            android:hint="@string/default_pwd"            android:text="@string/default_pwd"            android:textSize="20sp" />    LinearLayout>    <Button        android:id="@+id/btnGet"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="@string/get" />        <ListView        android:id="@+id/listView1"        android:layout_width="match_parent"        android:layout_height="match_parent" >    ListView>LinearLayout>

3.mainactivity

package com.example.getpkgfromftp;import it.sauronsoftware.ftp4j.FTPClient;import it.sauronsoftware.ftp4j.FTPDataTransferListener;import java.io.File;import android.app.Activity;import android.os.Bundle;import android.os.Environment;import android.os.Handler;import android.os.Message;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ArrayAdapter;import android.widget.Button;import android.widget.EditText;import android.widget.ListView;import android.widget.Toast;public class MainActivity extends Activity {    /** 只需要ip地址,不需要前面的ftp:// */    private static final String HOST = "";    private static final int PORT = 21;    private String USERNAME = "";    private String PASSWORD = "";    private ListView listView;    private ArrayAdapter adapter;    private FTPClient client;    private Handler handler = new Handler() {        @Override        public void handleMessage(Message msg) {            if (msg.what == 0x001) {                adapter.add((String) msg.obj);            } else if (msg.what == 0x002) {                Toast.makeText(MainActivity.this,                        "connect fail", Toast.LENGTH_SHORT)                        .show();            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        USERNAME = ((EditText) findViewById(R.id.etUserName)).getText()                .toString();        USERNAME += "@***.com";//这里是你的域名。一般公司给员工分配的用户名都有@的后缀        PASSWORD = ((EditText) findViewById(R.id.etPwd)).getText().toString();        Log.i("USERNAME", USERNAME);        Log.i("PASSWORD", PASSWORD);        listView = (ListView) findViewById(R.id.listView1);        adapter = new ArrayAdapter(this,                android.R.layout.simple_list_item_1);        listView.setAdapter(adapter);        ((Button) findViewById(R.id.btnGet))                .setOnClickListener(new OnClickListener() {                    @Override                    public void onClick(View v) {                        adapter.clear();                        new Thread(new Runnable() {                            @Override                            public void run() {                                client = new FTPClient();                                try {                                    client.connect(HOST, PORT);                                    client.login(USERNAME, PASSWORD);                                    String[] file = client.listNames();                                    for (int i = 0; i < file.length; i++) {                                        Log.i("file", file[i]);                                        Message message = handler                                                .obtainMessage(0x001, file[i]);                                        handler.sendMessage(message);                                    }                                } catch (Exception e) {                                    handler.sendEmptyMessage(0x002);                                    return;                                }                            }                        }).start();                    }                });        /**         * commons-net-3.0.1.jar          * listNames返回NULL,list返回Int,listFiles返回NULL         * 因为传进去的参数是(String)null         * 自己可以去了解,我这里就不演示了         */        listView.setOnItemClickListener(new OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view,                    final int position, long id) {                String dir = Environment.getExternalStorageDirectory()                        + "/test/";                File fileDir = new File(dir);                if (!fileDir.exists()) {                    fileDir.mkdirs();                }                String path = dir + adapter.getItem(position);                final File file = new File(path);                if (file.exists()) {                    file.delete();                    Log.i("delete", "original file deleted");                }                try {                    new Thread(new Runnable() {                        @Override                        public void run() {                            try {                                // 参考/doc/manual.en.html,最后面的参数是监听器                                client.download(adapter.getItem(position),                                        file, new MyTransferListener());                            } catch (Exception e) {                                e.printStackTrace();                            }                        }                    }).start();                } catch (Exception e) {                    e.printStackTrace();                }            }        });    }    public class MyTransferListener implements FTPDataTransferListener {        public void started() {            Log.i("download", "download start");        }        public void transferred(int length) {            Log.i("download", "have download " + length + " bytes");        }        public void completed() {            Log.i("download", "download completed");        }        public void aborted() {            Log.i("download", "download aborted");        }        public void failed() {            Log.i("download", "download failed");        }    }}

4.权限

<uses-permission android:name="android.permission.INTERNET" />    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

更多相关文章

  1. Android(安卓)向服务器发送get请求乱码问题
  2. Android(安卓)地址选择器仿京东;
  3. (翻译) Android(安卓)Accounts Api使用指南
  4. Android(安卓)dispatchTouchEvent介绍
  5. http://www.cnblogs.com/
  6. 文件接收网络对讲机C#服务器 Android客户端(二) C#服务器代码分析
  7. Android(安卓)手机上传图片至javaweb服务器(servlet)
  8. 百度地图SDK for Android【检索服务】
  9. Android(安卓)AdbCommandRejectedException和cannot bind to套接

随机推荐

  1. Android崩溃日志收集是个什么鬼?
  2. 一些Activity小技巧
  3. Android(安卓)signed APK程序正式签名方
  4. Android(安卓)入个门
  5. android之handler使用
  6. J2me游戏如何快速移植到Android(1)
  7. Android兼容性
  8. 微软云游戏服务xCloud将于9月15日登陆And
  9. Android(安卓)Service生命周期及用法!
  10. Android(安卓)几张图片制作成动画