ftp文件上传及下载工具类[通俗易懂]

ftp文件上传及下载工具类[通俗易懂]1、ftp文件上传用例解析(需使用apacher的commons-net-3.3.jar)publicclassTestFtp{@Testpublicvoidtest()throwsException{//1、创建FTP客户端FTPClientftpClient=newFTPClient();//2、

大家好,又见面了,我是你们的朋友全栈君。

1、ftp文件上传用例解析(需使用apacher的commons-net-3.3.jar)

public class TestFtp {

    @Test
    public void test() throws Exception {
        // 1、创建FTP客户端
        FTPClient ftpClient = new FTPClient();
        // 2、连接ftp地址
        ftpClient.connect("192.168.128.128", 21);
        // 3、登录
        ftpClient.login("ftpuser", "123456");
        // 4、设置文件存放目录
        ftpClient.changeWorkingDirectory("/home/ftpuser/www/images");
        // 5、设置上传文件类型(默认是文本)
        ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
        // 6、指定文件名及文件输入流,上传文件
        FileInputStream is = new FileInputStream(new File("f:\\eee"));
        ftpClient.storeFile("hello.jpg", is);
        // 7、登出
        ftpClient.logout();
    }
}

2、ftp文件上传及下载工具类代码实现:

/** * @author CSDN_LQR * @TODO ftp上传下载工具类 */
public class FtpUtil { 
   

    /** * Description: 向FTP服务器上传文件 * * @param host * FTP服务器hostname * @param port * FTP服务器端口 * @param username * FTP登录账号 * @param password * FTP登录密码 * @param basePath * FTP服务器基础目录 * @param filePath * FTP服务器文件存放路径。例如分日期存放:/2015/01/01。文件的路径为basePath+filePath * @param filename * 上传到FTP服务器上的文件名 * @param input * 输入流 * @return 成功返回true,否则返回false */
    public static boolean uploadFile(String host, int port, String username, String password, String basePath,
            String filePath, String filename, InputStream input) {
        boolean result = false;
        FTPClient ftp = new FTPClient();
        try {
            int reply;
            ftp.connect(host, port);// 连接FTP服务器
            // 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
            ftp.login(username, password);// 登录
            reply = ftp.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
                return result;
            }
            // 切换到上传目录
            if (!ftp.changeWorkingDirectory(basePath + filePath)) {
                // 如果目录不存在创建目录
                String[] dirs = filePath.split("/");
                String tempPath = basePath;
                for (String dir : dirs) {
                    if (null == dir || "".equals(dir))
                        continue;
                    tempPath += "/" + dir;
                    if (!ftp.changeWorkingDirectory(tempPath)) {
                        if (!ftp.makeDirectory(tempPath)) {
                            return result;
                        } else {
                            ftp.changeWorkingDirectory(tempPath);
                        }
                    }
                }
            }
            // 设置上传文件的类型为二进制类型
            ftp.setFileType(FTP.BINARY_FILE_TYPE);
            // 上传文件
            if (!ftp.storeFile(filename, input)) {
                return result;
            }
            input.close();
            ftp.logout();
            result = true;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                }
            }
        }
        return result;
    }

    /** * Description: 从FTP服务器下载文件 * * @param host * FTP服务器hostname * @param port * FTP服务器端口 * @param username * FTP登录账号 * @param password * FTP登录密码 * @param remotePath * FTP服务器上的相对路径 * @param fileName * 要下载的文件名 * @param localPath * 下载后保存到本地的路径 * @return */
    public static boolean downloadFile(String host, int port, String username, String password, String remotePath,
            String fileName, String localPath) {
        boolean result = false;
        FTPClient ftp = new FTPClient();
        try {
            int reply;
            ftp.connect(host, port);
            // 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
            ftp.login(username, password);// 登录
            reply = ftp.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
                return result;
            }
            ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录
            FTPFile[] fs = ftp.listFiles();
            for (FTPFile ff : fs) {
                if (ff.getName().equals(fileName)) {
                    File localFile = new File(localPath + "/" + ff.getName());

                    OutputStream is = new FileOutputStream(localFile);
                    ftp.retrieveFile(ff.getName(), is);
                    is.close();
                }
            }

            ftp.logout();
            result = true;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                }
            }
        }
        return result;
    }

    public static void main(String[] args) {
        try {
            FileInputStream in = new FileInputStream(new File("D:\\temp\\image\\gaigeming.jpg"));
            boolean flag = uploadFile("192.168.25.133", 21, "ftpuser", "ftpuser", "/home/ftpuser/www/images",
                    "/2015/01/21", "gaigeming.jpg", in);
            System.out.println(flag);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

懒人地址:http://download.csdn.net/detail/csdn_lqr/9692906

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/134697.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月6日 下午1:16
下一篇 2022年6月6日 下午1:36


相关推荐

  • 利用tasklist和taskkill实现判断进程数按名称杀掉进程

    利用tasklist和taskkill实现判断进程数按名称杀掉进程@echooffsetexe=firefox.exeset/anum=5for/f%%iin(‘tasklist^|find/c/i”%exe%”‘)doif%%igtr%num%taskkill/f/im%exe%TASKKILL[/Ssystem[/Uusername[/P[password]]]]{[/FIfilter][/PIDprocessid|/IMimagename]}[/T][/F]描述:使用该工具按

    2022年6月1日
    38
  • 【Android 】零基础到飞升 | ExpandableListView(可折叠列表)的基本使用

    【Android 】零基础到飞升 | ExpandableListView(可折叠列表)的基本使用2.5.5ExpandableListView(可折叠列表)的基本使用本节引言:本节要讲解的Adapter类控件是ExpandableListView,就是可折叠的列表,它是ListView的子类,在ListView的基础上它把应用中的列表项分为几组,每组里又可包含多个列表项。至于样子,类似于QQ联系人列表,他的用法与ListView非常相似,只是ExpandableListVivew显示的列表项需由ExpandableAdapter提供。下面我们来学习这个控件的基本使用!官方API:Exp

    2022年6月15日
    23
  • 1040. 有几个PAT(25)- PAT乙级真题

    1040. 有几个PAT(25)- PAT乙级真题1040.有几个PAT(25)字符串APPAPT中包含了两个单词“PAT”,其中第一个PAT是第2位(P),第4位(A),第6位(T);第二个PAT是第3位(P),第4位(A),第6位(T)。现给定字符串,问一共可以形成多少个PAT?输入格式:输入只有一行,包含一个字符串,长度不超过105,只包含P、A、T三种字母。输出格式:在一行中输出给定字符串中包含多少个PAT。由于结果可能比较大,只输出对…

    2022年5月1日
    47
  • 两军问题和拜占庭将军问题的区块链解读(二)

    两军问题和拜占庭将军问题的区块链解读(二)转自 https www jianshu com p 29db1b94c677 拜占庭将军问题是区块链技术中另一个经常被提到的模型 本篇将尽量用通俗的语言解释拜占庭将军问题的本质以及背后的经典算法 不当之处请指正 与两军问题一样 拜占庭将军问题也仅仅是提出了问题 并没有提出解决这个问题的方案 首先 我们需要了解什么是拜占庭将军问题 在中世纪 拜占庭帝国的几位将军各自带兵共同围困一

    2026年3月17日
    2
  • vm虚拟机安装win11_虚拟机15.5安装教程win7

    vm虚拟机安装win11_虚拟机15.5安装教程win7首先下载好虚拟机以及系统,并且把iso镜像解压好!打开虚拟机! 首先,选择创建虚拟机,然后选择典型.点击下一步! 选择你刚才下载的iso镜像文件.点击下一步! 选择XP版本,点击下一步,下一步是系统的存放位置,和系统名字,看自己怎么样方便吧!在点击下一步,是磁盘空间,这个随便选都可以,如果安装的系统系统用多少内存,就会消耗本机硬盘多少内存,没关系…

    2022年8月16日
    7
  • Java程序员烂大街了吗?是,也不是

    Java程序员烂大街了吗?是,也不是Java程序员烂大街了吗?有网友吐槽精通的人少,半吊子的人烂大街。半吊子程序员确实不少,除了自身学习有关,还跟培训机构教学有关,工作后能不能继续学造有关,现在学编程的越来越多,所以企业要求相对也比前些年要高很多。  企业想招一个合格的Jjava程序员很不容易。烂大街的说法有网友不怎么赞同,因为市场自己会过,留下好的淘汰掉不合格的。不合格的程序员有一些会放弃,从事别的工作,也有的会坚持学习达到市场的要求。只不过还有很多人在选择进入这个行业而已,很正常的现象。  以前可能知道大概会怎么使用就能找份不

    2022年7月7日
    318

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号