文章标题

来源:互联网 发布:java 免费开源框架 编辑:程序博客网 时间:2024/06/02 02:39

FTPUtils.java

package com.lingzhi.ftplibrary;import android.util.Log;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 java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.List;import java.util.TimeZone;public class FTPUtils {    private static final String TAG = FTPUtils.class.getSimpleName();    private static FTPUtils ftpInstance = null;    private FTPClient ftpClient;    private String ftpUrl;    private int ftpPort;    private String userName;    private String userPassword;    /*     * Ftp构造函数      */    private FTPUtils() {        this.ftpClient = new FTPClient();    }    public static FTPUtils getInstance() {        if (ftpInstance == null) {            ftpInstance = new FTPUtils();        }        return ftpInstance;    }    /**     * 设置FTP服务器     *     * @param ftpUrl       FTP服务器ip地址     * @param ftpPort      FTP服务器端口号     * @param userName     登陆FTP服务器的账号     * @param userPassword 登陆FTP服务器的密码     * @return     */    public void initFTPSetting(String ftpUrl, int ftpPort, String userName, String userPassword) {        this.ftpUrl = ftpUrl;        this.ftpPort = ftpPort;        this.userName = userName;        this.userPassword = userPassword;    }    /**     * @return 判断是否登入成功     */    public boolean ftpLogin() {        boolean isLogin = false;        FTPClientConfig ftpClientConfig = new FTPClientConfig();        ftpClientConfig.setServerTimeZoneId(TimeZone.getDefault().getID());        this.ftpClient.setControlEncoding("UTF-8");        this.ftpClient.configure(ftpClientConfig);        try {            if (this.ftpPort > 0) {                this.ftpClient.connect(this.ftpUrl, this.ftpPort);            } else {                this.ftpClient.connect(this.ftpUrl);            }            // FTP服务器连接回答            int reply = this.ftpClient.getReplyCode();            if (!FTPReply.isPositiveCompletion(reply)) {                this.ftpClient.disconnect();                Log.e(TAG, "登录FTP服务失败!");                return false;            }            this.ftpClient.login(this.userName, this.userPassword);            // 设置传输协议              this.ftpClient.enterLocalPassiveMode();            this.ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);            Log.i(TAG, this.userName + "成功登陆FTP服务器");            isLogin = true;        } catch (Exception e) {            e.printStackTrace();            Log.e(TAG, this.userName + "登录FTP服务失败!" + e.getMessage());        }        this.ftpClient.setBufferSize(1024 * 2);        this.ftpClient.setDataTimeout(30 * 1000);        return isLogin;    }    /**     * @退出关闭服务器链接     */    public void ftpLogOut() {        if (null != this.ftpClient && this.ftpClient.isConnected()) {            try {                boolean reuslt = this.ftpClient.logout();// 退出FTP服务器                  if (reuslt) {                    Log.i(TAG, "成功退出服务器");                }            } catch (IOException e) {                e.printStackTrace();                Log.w(TAG, "退出FTP服务器异常!" + e.getMessage());            } finally {                try {                    this.ftpClient.disconnect();// 关闭FTP服务器的连接                  } catch (IOException e) {                    e.printStackTrace();                    Log.w(TAG, "关闭FTP服务器的连接异常!");                }            }        }    }    /**     * 列出FTP下所有文件.     *     * @param remotePath 服务器目录     * @return FTPFile集合     * @throws IOException     */    public List<FTPFile> listFiles(String remotePath) {        List<FTPFile> list = new ArrayList<>();        // 获取文件        FTPFile[] files = new FTPFile[0];        try {            files = ftpClient.listFiles(remotePath);        } catch (IOException e) {            e.printStackTrace();        }        // 遍历并且添加到集合        for (FTPFile file : files) {            list.add(file);        }        return list;    }    public boolean findDirectory(String remotePath, String dstName) {        boolean isExist = false;        try {            List<FTPFile> list = listFiles(remotePath);            for (FTPFile ftpFile : list) {                if (ftpFile.getName().equals(dstName)) {                    isExist = true;                }            }        } catch (Exception e) {            e.printStackTrace();        }        return isExist;    }    public boolean createDirectory(String remoteDirectoryPath) {        boolean success;        try {            ftpClient.changeWorkingDirectory("/");            success = this.ftpClient.makeDirectory(remoteDirectoryPath);            if (success) {                Log.i(TAG, "目录创建成功: " + remoteDirectoryPath);            } else {                Log.e(TAG, "目录创建失败");            }        } catch (Exception e) {            e.printStackTrace();            Log.i(TAG, "目录创建失败");            success = false;        }        return success;    }    /***      * 上传Ftp文件     * @param localFile 当地文件     * @param romotUpLoadePath 上传服务器路径 - 应该以/结束     * */    public boolean uploadFile(File localFile, String romotUpLoadePath) {        BufferedInputStream inStream = null;        boolean success;        try {            this.ftpClient.changeWorkingDirectory(romotUpLoadePath);// 改变工作路径              inStream = new BufferedInputStream(new FileInputStream(localFile));            Log.i(TAG, localFile.getName() + "开始上传.....");            success = this.ftpClient.storeFile(localFile.getName(), inStream);            if (success) {                Log.i(TAG, localFile.getName() + "上传成功");                return true;            }        } catch (FileNotFoundException e) {            e.printStackTrace();            Log.e(TAG, localFile + "未找到");        } catch (IOException e) {            e.printStackTrace();        } finally {            if (inStream != null) {                try {                    inStream.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }        return false;    }    /***      * 下载文件      * @param remoteFileName   待下载文件名称      * @param localDires 下载到当地那个路径下      * @param remoteDownLoadPath remoteFileName所在的路径      * */    public boolean downloadFile(String remoteFileName, String localDires,                                String remoteDownLoadPath) {        String strFilePath = localDires + remoteFileName;        BufferedOutputStream outStream = null;        boolean success = false;        try {            this.ftpClient.changeWorkingDirectory(remoteDownLoadPath);            outStream = new BufferedOutputStream(new FileOutputStream(                    strFilePath));            Log.i(TAG, remoteFileName + "开始下载....");            success = this.ftpClient.retrieveFile(remoteFileName, outStream);            if (success) {                Log.i(TAG, remoteFileName + "成功下载到" + strFilePath);                return true;            }        } catch (Exception e) {            e.printStackTrace();            Log.e(TAG, remoteFileName + "下载失败");        } finally {            if (null != outStream) {                try {                    outStream.flush();                    outStream.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }        if (!success) {            Log.e(TAG, remoteFileName + "下载失败!!!");        }        return success;    }    /***      * @上传文件夹     * @param localDirectory     *            当地文件夹      * @param remoteDirectoryPath     *            FTPUtils 服务器路径 以目录"/"结束     * */    public boolean uploadDirectory(String localDirectory,                                   String remoteDirectoryPath) {        boolean success = false;        File src = new File(localDirectory);        try {            remoteDirectoryPath = remoteDirectoryPath + src.getName() + "/";            ftpClient.changeWorkingDirectory("/");            boolean isMakeDirectory = this.ftpClient.makeDirectory(remoteDirectoryPath);            if (isMakeDirectory) {                Log.i(TAG, "目录创建成功: " + remoteDirectoryPath);            } else {                Log.e(TAG, "目录创建失败: ");            }            // ftpClient.listDirectories();            File[] allFile = src.listFiles();            for (File anAllFile : allFile) {                if (!anAllFile.isDirectory()) {                    String srcName = anAllFile.getPath();                    success = uploadFile(new File(srcName), remoteDirectoryPath);                }            }            for (File anAllFile : allFile) {                if (anAllFile.isDirectory()) {                    // 递归                    success = uploadDirectory(anAllFile.getPath(),                            remoteDirectoryPath);                }            }        } catch (Exception e) {            e.printStackTrace();            Log.i(TAG, "上传操作失败");            success = false;        }        return success;    }    /***      * @下载文件夹     * @param localDirectoryPath 本地地址     * @param remoteDirectory 远程文件夹     * */    public boolean downLoadDirectory(String localDirectoryPath, String remoteDirectory) {        try {            String fileName = new File(remoteDirectory).getName();            localDirectoryPath = localDirectoryPath + fileName + "/";            Log.i(TAG, "downLoadDirectory: " + localDirectoryPath);            boolean isMkdirs = new File(localDirectoryPath).mkdirs();            if (!isMkdirs) {                Log.e(TAG, "创建文件夹失败 ");            }            FTPFile[] allFile = this.ftpClient.listFiles(remoteDirectory);            for (FTPFile anAllFile : allFile) {                if (!anAllFile.isDirectory()) {                    downloadFile(anAllFile.getName(), localDirectoryPath, remoteDirectory);                }            }            for (FTPFile anAllFile : allFile) {                if (anAllFile.isDirectory()) {                    String strRemoteDirectoryPath = remoteDirectory + "/" + anAllFile.getName();                    downLoadDirectory(localDirectoryPath, strRemoteDirectoryPath);                }            }        } catch (IOException e) {            e.printStackTrace();            Log.i(TAG, "下载文件夹失败");            return false;        }        return true;    }    public boolean removeFile(String remotePath, String dstName) {        boolean success = false;        try {            ftpClient.changeWorkingDirectory(remotePath);            FTPFile[] ftpFiles = ftpClient.listFiles();            // 循环遍历            for (FTPFile ftpFile : ftpFiles) {                // 找到需要下载的文件                if (ftpFile.getName().equals(dstName)) {                    Log.i(TAG, "find: " + dstName);                    // 创建本地目录                    // 删除前时间                    success = deleteDirectoryOrFile(ftpFile);                } else if (dstName == null) {                    //不按文件名删除文件                    success = deleteDirectoryOrFile(ftpFile);                }            }        } catch (IOException e) {            e.printStackTrace();            Log.i(TAG, "删除操作失败");            return false;        }        Log.i(TAG, "removeFile: " + success);        return success;    }    private boolean deleteDirectoryOrFile(FTPFile ftpFile) throws IOException {        boolean success;        if (ftpFile.isDirectory()) {            // 删除多个文件            removeFile(ftpFile.getName(), null);            ftpClient.changeToParentDirectory();            success = ftpClient.removeDirectory(ftpFile.getName());        } else {            // 删除单个文件            success = ftpClient.deleteFile(ftpFile.getName());        }        return success;    }}

FTPTestActivity.java

package com.lingzhi.ftpdemo;import android.app.Activity;import android.os.Bundle;import android.os.Environment;import android.view.View;import android.view.View.OnClickListener;import android.widget.Toast;import com.lingzhi.ftplibrary.FTPUtils;public class FTPTestActivity extends Activity implements OnClickListener {    private static final String TAG = FTPTestActivity.class.getSimpleName();    private static final String NATIVE_MODULES_PATH = "/Modules/FaceAnalyzer/FaceRecognize/PeopleInfo/";    private static final String REMOTE_MODULES_PATH = "pub/Modules/FaceAnalyzer/FaceRecognize/";    private static final String REMOTE_DIRECTORY_NAME = "PeopleInfo";    public static final String FEATURE_EXTRACT_STRATEGY = "HJPOEM_";    private static final String FTP_HOST = "192.168.0.123";    private static final int FTP_PORT = 21;    private static final String FTP_USER = "anonymous";    private static final String FTP_PASSWORD = "";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        findViewById(R.id.button_upload).setOnClickListener(this);        findViewById(R.id.button_download).setOnClickListener(this);        findViewById(R.id.button_delete).setOnClickListener(this);        // 初始化和FTP服务器交互的类        initFTPServerSetting();    }    public void initFTPServerSetting() {        FTPUtils.getInstance().initFTPSetting(FTP_HOST, FTP_PORT, FTP_USER, FTP_PASSWORD);    }    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.button_upload:                // 上传文件                new Thread(new Runnable() {                    @Override                    public void run() {                        FTPUtils.getInstance().ftpLogin();                        boolean isExist = FTPUtils.getInstance().findDirectory(REMOTE_MODULES_PATH, REMOTE_DIRECTORY_NAME);                        if (!isExist) {                            FTPUtils.getInstance().createDirectory(REMOTE_MODULES_PATH + REMOTE_DIRECTORY_NAME);                        }                        final boolean isUpload = FTPUtils.getInstance().uploadDirectory(                                Environment.getExternalStorageDirectory().getPath() + NATIVE_MODULES_PATH + "HJFEAT_45",                                REMOTE_MODULES_PATH + REMOTE_DIRECTORY_NAME + "/");                        FTPUtils.getInstance().ftpLogOut();                        runOnUiThread(new Runnable() {                            @Override                            public void run() {                                if (isUpload) {                                    Toast.makeText(FTPTestActivity.this, "上传成功", Toast.LENGTH_SHORT).show();                                } else {                                    Toast.makeText(FTPTestActivity.this, "上传失败", Toast.LENGTH_SHORT).show();                                }                            }                        });                    }                }).start();                break;            case R.id.button_download:                // 下载文件                Toast.makeText(this, "暂不可用", Toast.LENGTH_SHORT).show();                new Thread(new Runnable() {                    @Override                    public void run() {                        //FTPUtils.getInstance().downLoadDirectory(Environment.getExternalStorageDirectory().getPath() + "/", "pub/ftptest00/");                    }                }).start();                break;            case R.id.button_delete:                // 删除文件                new Thread(new Runnable() {                    @Override                    public void run() {                        FTPUtils.getInstance().ftpLogin();                        final boolean isRemoveFile = FTPUtils.getInstance().removeFile(REMOTE_MODULES_PATH + REMOTE_DIRECTORY_NAME + "/", "HJFEAT_45");                        FTPUtils.getInstance().ftpLogOut();                        runOnUiThread(new Runnable() {                            @Override                            public void run() {                                if (isRemoveFile) {                                    Toast.makeText(FTPTestActivity.this, "删除成功", Toast.LENGTH_SHORT).show();                                } else {                                    Toast.makeText(FTPTestActivity.this, "删除失败", Toast.LENGTH_SHORT).show();                                }                            }                        });                    }                }).start();                break;            default:                break;        }    }}

activity_main.xml

<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.xiaobailong24.ftpdemo.MainActivity"><Button android:id="@+id/button_upload" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="上传"/><Button android:id="@+id/button_download" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="下载"/><Button android:id="@+id/button_delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="删除"/></LinearLayout>
原创粉丝点击