关于FTP远程和服务器通信建立连接、增加、删除、下载、预览图片功能

本文介绍了一个项目中如何通过FTP与服务器进行通信,涉及建立连接、获取远程及本地文件列表、文件数量对比以及删除和添加操作。文章提供了关键代码,并预告了后续将讲解列表展示及长按删除、预览页面等内容。
摘要由CSDN通过智能技术生成

最近项目完工,闲暇之余抽出来时间给大家分享项目中用到的关于FTP和服务端交互的列子。本项目是基于串口编程,通过给串口发送指令给电子锁(文章后边简称e-lock)发送指令从而启动e-lock的wifi模块,然后手持机去连接wifi展开通信。
[这里是代码目录结构]
DelThread.java
FTPConstant.java
FTPHelper.java
RS232Activity.java
1. FTP远程建立连接

public static final String userName = "root";
public static final String password = "root";
public static final String url = "192.168.1.251";
public static final int port = 21;
public static final String fileName = AppUtil.createName(System.currentTimeMillis());
public static final String localPath  = FileUtil.getNuctechPath();// 本地路径;
public static final String remotePath = "/mnt/660010F011"; //FTP远程文件夹目录
public static final int DELETE_ITEM = 001; //FTP通信`
FTPClient ftp = FTPHelper.getConnectionFTP(FTPConstant.url,
                        FTPConstant.port, FTPConstant.userName,
                        FTPConstant.password);
                        ftp.changeWorkingDirectory(FTPConstant.remotePath);// 转移到FTP服务器目录

2. 那么上一部建立连接拿到FtpClient的实例化对象之后 我们就要获取远程文件列表和本地缓存的文件列表

这里我们把文件加到list集合中便于比较

// 先从本地去取文件
picPath = FileUtil.getNuctechPath();// 本地路径
List fileDirList = FileUtil.getFileDirList(picPath);`
List ftpList = new ArrayList();
FTPFile[] listFiles = ftp.listFiles();
for (FTPFile ftpFile : listFiles) {
ImageItem item = new ImageItem();
item.setFileName(ftpFile.getName());
item.setImagePath(picPath);
ftpList.add(item);
}
3. 对比本地和远程的文件数量,也就是比大小,进而选择是去删除还是增加,要选取参照物。

if (ftpList.size() > fileDirList.size()) {
    downDifFromFtp(ftpList, fileDirList);
    mHandler.postDelayed(new Runnable() {

        @Override
        public void run() {
           ActionToshowPicPage(FileUtil
          .getFileDirList(picPath));
        }
    }, 300);
} else if (ftpList.size() < fileDirList.size()) {
        delectLocalDiffFtp(fileDirList, ftpList);
        mHandler.postDelayed(new Runnable() {

        @Override
        public void run() {
           ActionToshowPicPage(FileUtil
          .getFileDirList(picPath));
        }
        }, 300);
} else {
      ActionToshowPicPage(fileDirList);
}
} catch (IOException e) {
    e.printStackTrace();
}
好那么从以上代码片段大概意思也就能明白什么意思了
如果远程文件个数大于本地缓存的,我们就要从远程下载本地所没有的;
如果远程文件夹个数小于本地缓存的, 我们就要从本地进行删除多余的;
反之我们就直接显示ftp文件列表
这一部分我相信只要入门安卓工作一年应该就能看明白的
那么下边附上代码核心部分

 1. 下载
 /**
 2. 通过比对ftp远程文件和本地不同,进行下载
 3. 
 4. @param ftpList
 5. @param fileDirList
 6. 
  */
  private void downDifFromFtp(final List<ImageItem> ftpList,     final List<ImageItem> fileDirList) {
 List<String> uncontainList = FTPHelper.getUncontain(
(ArrayList<ImageItem>) ftpList, fileDirList);
    for (String imageItem : uncontainList) {
        if (AppUtil.isNetworkAvaiable(mContext)) {
        picPath = FileUtil.getNuctechPath();// 本地路径
        ftpDownload(FTPConstant.url, FTPConstant.port,
        FTPConstant.userName, FTPConstant.password,
        FTPConstant.remotePath,picPath, imageItem);
        try {
            Thread.sleep(300);
        } catch (InterruptedException e) {
                        e.printStackTrace();
        }
        } else {
            showMsg(getString(R.string.net_error));
        }
    }
 7. 删除
   /**
    * 通过比对local和ftp,如果本地有多余的立马删除
    * 
    * @param fileDirList
    * @param ftpList
    */
    private void delectLocalDiffFtp(List<ImageItem> ftpList, List<ImageItem> fileDirList) {
  List<String> uncontainList = FTPHelper.getUncontain2(
  (ArrayList<ImageItem>) ftpList, fileDirList);
  for (String imageItem : uncontainList) {
      DataCleanManager.deleteFile(picPath, imageItem);
  }
 // 最后通知图库更新
 sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + picPath)));
 }
}
 8. 好了 最后一个跳转页面

    /**
     * 跳转到列表页面
     * 
     * @param fileDirList
     */
 protected void ActionToshowPicPage(List<ImageItem>fileDirLis
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值