Android开发 之 利用commons-net-3.0.1.jar包实现FTP上传下载功能
来源:互联网 发布:天刀丐帮捏脸数据男 编辑:程序博客网 时间:2024/06/05 17:52
参考原文链接地址:
http://blog.csdn.net/ljphhj/article/details/11859593#comments
感谢作者:胖虎 无私的提供Demo,以及其在我实现过程中的指导!谢谢!
1、搭建环境
本文实现的Android访问FTP服务器,实现上传和下载的功能
是利用的Apache公司出的commons-net-3.0.1.jar包。
关于jar包的引用,可以参看我的另外一个博客。
http://blog.csdn.net/liuyixin01/article/details/12685067
2、关于FTP服务器
本文的测试FTP是在自己电脑(内部局域网)上利用Serv-U搭建的环境。
FTP服务器地址:219.231.164.115
FTP服务器断口:21
登陆账号:yixin
登陆密码:yixin
3、Demo例程源码
[在工程中建立一个Activity,起名为:FtpActivity]
[在工程中建立一个class,起名为:FTPUtils]
主Activity:FtpActivity
package com.example.ftptest_apache;import java.security.PublicKey;import android.R.anim;import android.os.Bundle;import android.os.StrictMode;import android.app.Activity;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;/* * 1.文件上传到FTP服务器 * 2.从FTP服务器上下载文件 */public class FtpActivity extends Activity implements OnClickListener {//buttonsprivate Button buttonUpLoad = null;private Button buttonDownLoad=null;//FTP工具类private FTPUtils ftpUtils = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_ftp);//获取控件对象buttonUpLoad=(Button)findViewById(R.id.button_1);buttonDownLoad=(Button)findViewById(R.id.button_2);//设置控件相应函数buttonUpLoad.setOnClickListener(this);buttonDownLoad.setOnClickListener(this);//搭建环境的API Level必须大于等于9 if (android.os.Build.VERSION.SDK_INT > 9) {StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();StrictMode.setThreadPolicy(policy);}//初始化和FTP服务器交互的类InitFTPServerSetting();}public void InitFTPServerSetting() {ftpUtils = FTPUtils.getInstance();boolean flag = ftpUtils.initFTPSetting("219.231.164.115", 21, "yixin", "yixin");} @Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.button_1:{//上传文件ftpUtils.uploadFile("/sdcard/ftpdata/ceshi.mp4", "ceshi.mp4");}break;case R.id.button_2:{//下载文件//参数为:要存放的文件路径和远程FTP文件名字ftpUtils.downLoadFile("/sdcard/ftpdata/ceshi.mp4", "ceshi.mp4"); }break;default:break;}}}
工具类:FTPUtils
package com.example.ftptest_apache;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.net.SocketException;import org.apache.commons.net.ftp.FTP;import org.apache.commons.net.ftp.FTPClient;import org.apache.commons.net.ftp.FTPClientConfig;import org.apache.commons.net.ftp.FTPFile;import org.apache.commons.net.ftp.FTPReply;import android.R.string;import android.graphics.Bitmap.Config;import android.nfc.Tag;import android.util.Log;/* * 用于Android和FTP服务器进行交互的工具类 */public class FTPUtils {private static final String Tag = null;private FTPClient ftpClient = null;private static FTPUtils ftpUtilsInstance = null;private String FTPUrl;private int FTPPort;private String UserName;private String UserPassword;private FTPUtils() {ftpClient = new FTPClient();}/* 得到类对象实例 */public static FTPUtils getInstance() {if (ftpUtilsInstance == null) {ftpUtilsInstance = new FTPUtils();}return ftpUtilsInstance;}/* * 设置FTP服务器 * @param FTPUrlFTP服务器IP地址 * @param FTPPortFTP服务器端口号 * @param UserName登陆FTP服务器的账号 * @param UserPassword 登陆FTP服务器的密码 */public boolean initFTPSetting(String FTPUrl,int FTPPort,String UserName,String UserPassword) {this.FTPUrl = FTPUrl;this.FTPPort= FTPPort;this.UserName=UserName;this.UserPassword=UserPassword;int reply;try {//1.要连接的FTP服务器的地址、端口ftpClient.connect(FTPUrl,FTPPort);//2.登陆FTP服务器ftpClient.login(UserName, UserPassword);//3.看返回值是不是230,如果是,表示登陆成功reply = ftpClient.getReplyCode();if (!FTPReply.isPositiveCompletion(reply)) {//断开连接ftpClient.disconnect();return false;}return true;} catch (SocketException e) {e.printStackTrace();return false;} catch (IOException e) {e.printStackTrace();return false;}}/* * 上传文件 * @param FilePath要上传文件所在的SDCard的路径 * @param FileName要上传文件的文件名(如:SIM的唯一标识码) * @return true为成功, false为失败 */public boolean uploadFile(String FilePath,String FileName) {//判断FTP是否仍在连接if (!ftpClient.isConnected()) {if (!initFTPSetting(FTPUrl, FTPPort, UserName, UserPassword)) {return false;}}try {//1.设置存储路径ftpClient.makeDirectory("/ftpdata");ftpClient.changeWorkingDirectory("/ftpdata");//2.设置上传文件需要的一些基本信息ftpClient.setBufferSize(1024);ftpClient.setControlEncoding("UTF-8");ftpClient.enterLocalPassiveMode();ftpClient.setFileType(FTP.BINARY_FILE_TYPE);//3.文件上传FileInputStream fileInputStream = new FileInputStream(FilePath);ftpClient.storeFile(FileName, fileInputStream);//4.关闭文件流fileInputStream.close();//5.退出登录FTP,关闭ftpClient连接ftpClient.logout();ftpClient.disconnect();} catch (IOException e) {Log.d(Tag, "UpLoad failed"); //输出错误消息e.printStackTrace();return false;}return false;}/* * 下载文件 * @param FilePath 要存放的文件路径 * @param FileName 远程FTP服务器上的那个文件的名字 * @return true为成功, false为失败 */public boolean downLoadFile(String FilePath,String FileName) {//判断FTP是否仍在连接if (!ftpClient.isConnected()) {if (!initFTPSetting(FTPUrl, FTPPort, UserName, UserPassword)) {return false;}}try {//1.转到指定的下载目录ftpClient.changeWorkingDirectory("/ftpdata");//2.列出该目录下的所有文件FTPFile[] files = ftpClient.listFiles();//3.遍历所有文件,找到指定的文件for (FTPFile file : files) {String fileName = file.getName();if (file.getName().equals(FileName)) {//根据绝对路径初始化文件File localFile = new File(FilePath);//输出流FileOutputStream outputStream = new FileOutputStream(localFile);//下载文件ftpClient.retrieveFile(file.getName(), outputStream);//关闭流outputStream.close();}}//4.退出登录FTP,关闭ftpClient的连接ftpClient.logout();ftpClient.disconnect();} catch (IOException e) {// TODO: handle exceptionLog.d(Tag, "DownLoad failed"); e.printStackTrace();return false;}return true;}}
4、配置Android XML文件
a/设置Button信息,对layout中的activity_ftp.xml进行修改,加入按键
<Button android:id="@+id/button_1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/UpLoad"/> <Button android:id="@+id/button_2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/DownLoad" />
b/由于用到了String中的值,也需要在values的strings.xml 中加入字符名
<string name="UpLoad">UpLoad</string> <string name="DownLoad">DownLoad</string>
c/对安卓程序加入访问Internet权限,对AndroidManifest.xml进行修改
<uses-permission android:name="android.permission.INTERNET" />
d/对安卓程序加入读写SD卡权限,对AndroidManifest.xml进行修改
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
5、注意事项
a/FTPUtils类中uploadFile方法的调用
* 上传文件 * @param FilePath要上传文件所在的SDCard的路径 * @param FileName要上传文件的文件名(如:SIM的唯一标识码) * @return true为成功, false为失败 */ public boolean uploadFile(String FilePath,String FileName)
比如要上传到ftp根目录下的ftpdata文件夹下,要上传的文件ceshi.mp4在SD卡的ftpdata文件夹下,代码为:
ftpUtils.uploadFile("/sdcard/ftpdata/ceshi.mp4", "ceshi.mp4");
b/FTPUtils类中downLoadFile方法的调用
* 下载文件 * @param FilePath 要存放的文件路径 * @param FileName 远程FTP服务器上的那个文件的名字 * @return true为成功, false为失败public boolean downLoadFile(String FilePath,String FileName)比如我要下载ftp根目录下的ftpdata文件夹下ceshi.mp4到SD卡的ftpdata文件夹下,代码为:
ftpUtils.downLoadFile("/sdcard/data/ceshi.mp4", "ceshi.mp4");
- Android开发 之 利用commons-net-3.0.1.jar包实现FTP上传下载功能
- Android 利用commons-net-3.3实现ftp上传下载
- 利用commons-net-3.2.jar实现ftp文件上传功能
- commons net jar包实现文件ftp上传和下载功能 (commons net ftp 使用1)
- Commons net实现 FTP上传下载
- 使用Apache 的commons-net 包实现FTP上传下载小结
- 利用Apache commons net 包实现FTP上传和下载
- Android 使用commons-net包进行FTP开发教程
- Android 服务器之FTP服务器上传下载功能的实现
- 利用org.apache.commons.net.ftp包实现一个简单的ftp客户端实用类
- 使用org.apache.commons.net.ftp包开发FTP客户端,实现进度汇报,实现断点续
- [Android中级]使用Commons-net-ftp来实现FTP上传、下载的功能
- 利用Apache的commons-net实现FTP的文件读取、上传、下载、删除和移动功能
- 利用Apache的commons-net实现FTP的文件读取、上传、下载、删除和移动功能
- 基于 apache 的 commons-net-3.3.jar 的 ftp java代码上传下载文件
- 基于apache的commons-net-3.3.jar的 ftp java代码上传下载文件
- apache 的 commons-net-3.3.jar 的 ftp java代码上传下载文件
- FTP上传下载(Apache Commons Net)
- OCP-1Z0-051-V9.02-50题
- 自定义js扩展DOM功能
- css实现文字竖排效果
- 关于Android短信的解析
- Office文档在线编辑的实现之一
- Android开发 之 利用commons-net-3.0.1.jar包实现FTP上传下载功能
- sql规范告诫 解决兼容性问题 经验记录
- 面试题37:两个链表的第一个公共结点
- 类:加载、继承、多态(day04-13.10.16)
- Oracle GoldenGate 11gR2 Configuration On Oracle Database 11gR2 RAC ACFS
- 修正下载时错乱文件名小工具
- [并查集]最优路线
- Deep Learning(深度学习)学习笔记整理系列之(三)
- Documentation/pcmcia/devicetable