android 基于apache ftp server

转自:http://blog.csdn.net/yudajun/article/details/8803356

最近研究了一下在android端实现ftp server 功能,在网上搜了几个,没有能用的基本是各种抄袭,还是自己研究吧

首先到 apache官网下载ftp server 相关jar和配置文件,最新的是Apache FtpServer 1.0.6 Release版本


看一下效果图:





由于是apache已经将ftp server相关的实现封装的很好了,所以实现起来就简单多了

导入路径\apache-ftpserver-1.0.6\common\lib下相关jar包

主要的jar包文件



实现代码:


[java] view plain copy
  1. package com.orgcent.ftp;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileNotFoundException;  
  5. import java.io.FileOutputStream;  
  6. import java.io.IOException;  
  7. import java.io.InputStream;  
  8. import java.net.InetAddress;  
  9. import java.net.NetworkInterface;  
  10. import java.net.SocketException;  
  11. import java.util.Enumeration;  
  12.   
  13. import org.apache.ftpserver.FtpServer;  
  14. import org.apache.ftpserver.FtpServerFactory;  
  15. import org.apache.ftpserver.ftplet.FtpException;  
  16. import org.apache.ftpserver.listener.ListenerFactory;  
  17. import org.apache.ftpserver.ssl.SslConfigurationFactory;  
  18. import org.apache.ftpserver.usermanager.PropertiesUserManagerFactory;  
  19.   
  20. import android.app.Activity;  
  21. import android.content.Context;  
  22. import android.os.Bundle;  
  23. import android.os.Environment;  
  24. import android.util.Log;  
  25. import android.widget.TextView;  
  26.   
  27. public class FtpServerActivity extends Activity {  
  28.   
  29.       
  30.     private FtpServer mFtpServer;  
  31.     private String ftpConfigDir= Environment.getExternalStorageDirectory().getAbsolutePath()+"/ftpConfig/";  
  32.   
  33.     @Override  
  34.     public void onCreate(Bundle savedInstanceState) {  
  35.         super.onCreate(savedInstanceState);  
  36.         setContentView(R.layout.main);  
  37.           
  38.         TextView tv=(TextView)findViewById(R.id.tvText);  
  39.         String info="请通过浏览器或者我的电脑访问以下地址\n"+"ftp://"+getLocalIpAddress()+":2221\n";  
  40.         tv.setText(info);  
  41.           
  42.         File f=new File(ftpConfigDir);  
  43.         if(!f.exists())  
  44.             f.mkdir();  
  45.         copyResourceFile(R.raw.users, ftpConfigDir+"users.properties");  
  46.         Config1();  
  47.     }  
  48.   
  49.      public String getLocalIpAddress() {  
  50.             String strIP=null;  
  51.             try {  
  52.                 for (Enumeration en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {  
  53.                     NetworkInterface intf = en.nextElement();  
  54.                     for (Enumeration enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {  
  55.                         InetAddress inetAddress = enumIpAddr.nextElement();  
  56.                         if (!inetAddress.isLoopbackAddress()) {  
  57.                             strIP= inetAddress.getHostAddress().toString();  
  58.                         }  
  59.                     }  
  60.                 }  
  61.             } catch (SocketException ex) {  
  62.                 Log.e("msg", ex.toString());  
  63.             }  
  64.             return strIP;  
  65.         }  
  66.        
  67.     private void copyResourceFile(int rid, String targetFile){  
  68.         InputStream fin = ((Context)this).getResources().openRawResource(rid);  
  69.         FileOutputStream fos=null;  
  70.         int length;  
  71.         try {  
  72.             fos = new FileOutputStream(targetFile);  
  73.             byte[] buffer = new byte[1024];   
  74.             while( (length = fin.read(buffer)) != -1){  
  75.                 fos.write(buffer,0,length);  
  76.             }  
  77.         } catch (FileNotFoundException e) {  
  78.             e.printStackTrace();  
  79.         } catch (IOException e) {  
  80.             e.printStackTrace();  
  81.         } finally{  
  82.             if(fin!=null){  
  83.                 try {  
  84.                     fin.close();  
  85.                 } catch (IOException e) {  
  86.                     e.printStackTrace();  
  87.                 }  
  88.             }  
  89.              if(fos!=null){  
  90.                  try {  
  91.                     fos.close();  
  92.                 } catch (IOException e) {  
  93.                     e.printStackTrace();  
  94.                 }  
  95.              }  
  96.         }  
  97.     }  
  98.       
  99.     void Config1(){  
  100. //      Now, let's configure the port on which the default listener waits for connections.  
  101.   
  102.             FtpServerFactory serverFactory = new FtpServerFactory();  
  103.                       
  104.             ListenerFactory factory = new ListenerFactory();  
  105.                       
  106.             PropertiesUserManagerFactory userManagerFactory = new PropertiesUserManagerFactory();  
  107.               
  108.             String[] str ={"mkdir", ftpConfigDir};  
  109.             try {   
  110.                 Process ps = Runtime.getRuntime().exec(str);  
  111.                 try {  
  112.                     ps.waitFor();  
  113.                 } catch (InterruptedException e) {  
  114.                     e.printStackTrace();  
  115.                 }   
  116.             }catch (IOException e) {  
  117.                 e.printStackTrace();  
  118.             }  
  119.               
  120.             String filename=ftpConfigDir+"users.properties";//"/sdcard/users.properties";  
  121.             File files=new File(filename);  
  122.               
  123.             userManagerFactory.setFile(files);  
  124.             serverFactory.setUserManager(userManagerFactory.createUserManager());  
  125.             // set the port of the listener  
  126.             factory.setPort(2221);  
  127.   
  128.             // replace the default listener  
  129.             serverFactory.addListener("default", factory.createListener());  
  130.                               
  131.             // start the server  
  132.             FtpServer server = serverFactory.createServer();   
  133.             this.mFtpServer = server;         
  134.             try {  
  135.                 server.start();  
  136.             } catch (FtpException e) {  
  137.                 e.printStackTrace();  
  138.             }  
  139.     }  
  140.       
  141.     void Config2(){  
  142. //      Now, let's make it possible for a client to use FTPS (FTP over SSL) for the default listener.  
  143.   
  144.   
  145.         FtpServerFactory serverFactory = new FtpServerFactory();  
  146.                   
  147.         ListenerFactory factory = new ListenerFactory();  
  148.                   
  149.         // set the port of the listener  
  150.         factory.setPort(2221);  
  151.   
  152.         // define SSL configuration  
  153.         SslConfigurationFactory ssl = new SslConfigurationFactory();  
  154.         ssl.setKeystoreFile(new File(ftpConfigDir+"ftpserver.jks"));  
  155.         ssl.setKeystorePassword("password");  
  156.   
  157.         // set the SSL configuration for the listener  
  158.         factory.setSslConfiguration(ssl.createSslConfiguration());  
  159.         factory.setImplicitSsl(true);  
  160.   
  161.         // replace the default listener  
  162.         serverFactory.addListener("default", factory.createListener());  
  163.                   
  164.         PropertiesUserManagerFactory userManagerFactory = new PropertiesUserManagerFactory();  
  165.         userManagerFactory.setFile(new File(ftpConfigDir+"users.properties"));  
  166.                   
  167.         serverFactory.setUserManager(userManagerFactory.createUserManager());  
  168.                   
  169.         // start the server  
  170.         FtpServer server = serverFactory.createServer();   
  171.         this.mFtpServer = server;    
  172.         try {  
  173.             server.start();  
  174.         } catch (FtpException e) {  
  175.             e.printStackTrace();  
  176.         }  
  177.     }  
  178.       
  179.     @Override  
  180.     protected void onDestroy() {  
  181.         super.onDestroy();  
  182.           
  183.         if(null != mFtpServer) {  
  184.             mFtpServer.stop();  
  185.             mFtpServer = null;  
  186.         }  
  187.     }  
  188.       
  189. }  


最重要一步,配置文件修改

配置文件所在目录:apache-ftpserver-1.0.6\res\conf

这里我们主要使用users.properties配置文件,修改内容如下

[java] view plain copy
  1. # Licensed to the Apache Software Foundation (ASF) under one  
  2. # or more contributor license agreements.  See the NOTICE file  
  3. # distributed with this work for additional information  
  4. # regarding copyright ownership.  The ASF licenses this file  
  5. # to you under the Apache License, Version 2.0 (the  
  6. "License"); you may not use this file except in compliance  
  7. # with the License.  You may obtain a copy of the License at  
  8. #  
  9. #  http://www.apache.org/licenses/LICENSE-2.0  
  10. #  
  11. # Unless required by applicable law or agreed to in writing,  
  12. # software distributed under the License is distributed on an  
  13. "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY  
  14. # KIND, either express or implied.  See the License for the  
  15. # specific language governing permissions and limitations  
  16. # under the License.  
  17.   
  18. # Password is "admin"  
  19. ftpserver.user.admin.userpassword=21232F297A57A5A743894A0E4A801FC3  
  20.   
  21. ftpserver.user.admin.homedirectory=/mnt/sdcard  
  22. ftpserver.user.admin.enableflag=true  
  23. ftpserver.user.admin.writepermission=true  
  24. ftpserver.user.admin.maxloginnumber=0  
  25. ftpserver.user.admin.maxloginperip=0  
  26. ftpserver.user.admin.idletime=0  
  27. ftpserver.user.admin.uploadrate=0  
  28. ftpserver.user.admin.downloadrate=0  
  29.   
  30. ftpserver.user.anonymous.userpassword=admin  
  31. ftpserver.user.anonymous.homedirectory=/mnt/sdcard  
  32. ftpserver.user.anonymous.enableflag=true  
  33. ftpserver.user.anonymous.writepermission=true  
  34. ftpserver.user.anonymous.maxloginnumber=20  
  35. ftpserver.user.anonymous.maxloginperip=2  
  36. ftpserver.user.anonymous.idletime=300  
  37. ftpserver.user.anonymous.uploadrate=4800  
  38. ftpserver.user.anonymous.downloadrate=4800  


最后别忘了相关权限:
[java] view plain copy
  1. "android.permission.WRITE_EXTERNAL_STORAGE" >  
  2.       
  3.     "android.permission.INTERNET" >  
  4.       
  5.     "android.permission.ACCESS_WIFI_STATE" >  
  6.       
  7.     "android.permission.READ_PHONE_STATE" >  
  8.       
  9.     "android.permission.WAKE_LOCK" >  
  10.       
  11.     "android.permission.CHANGE_WIFI_STATE" >  
  12.       

ok,这样简单的就完成了android端ftp server 服务器功能

你可能感兴趣的:(android 基于apache ftp server)