Java利用apache ftp工具实现文件上传下载和删除功能

利用apache ftp工具实现文件的上传下载和删除,具体如下

1、下载相应的jar包

commons-net-1.4.1.jar

2、实现代码如下:

public class FtpUtils {
    //ftp服务器地址
    public String hostname = "192.168.1.249";
    //ftp服务器端口号默认为21
    public Integer port = 21 ;
    //ftp登录账号
    public String username = "root";
    //ftp登录密码
    public String password = "123"; 

    public FTPClient ftpClient = null; 

    /**
     * 初始化ftp服务器
     */
    public void initFtpClient() {
      ftpClient = new FTPClient();
      ftpClient.setControlEncoding("utf-8");
      try {
        System.out.println("connecting...ftp服务器:"+this.hostname+":"+this.port);
        ftpClient.connect(hostname, port); //连接ftp服务器
        ftpClient.login(username, password); //登录ftp服务器
        int replyCode = ftpClient.getReplyCode(); //是否成功登录服务器
        if(!FTPReply.isPositiveCompletion(replyCode)){
          System.out.println("connect failed...ftp服务器:"+this.hostname+":"+this.port);
        }
        System.out.println("connect successfu...ftp服务器:"+this.hostname+":"+this.port);
      }catch (MalformedURLException e) {
        e.printStackTrace();
      }catch (IOException e) {
        e.printStackTrace();
      }
    } 

    /**
    * 上传文件
    * @param pathname ftp服务保存地址
    * @param fileName 上传到ftp的文件名
    * @param originfilename 待上传文件的名称(绝对地址) *
    * @return
    */
    public boolean uploadFile( String pathname, String fileName,String originfilename){
      boolean flag = false;
      InputStream inputStream = null;
      try{
        System.out.println("开始上传文件");
        inputStream = new FileInputStream(new File(originfilename));
        initFtpClient();
        ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);
        CreateDirecroty(pathname);
        ftpClient.makeDirectory(pathname);
        ftpClient.changeWorkingDirectory(pathname);
        ftpClient.storeFile(fileName, inputStream);
        inputStream.close();
        ftpClient.logout();
        flag = true;
        System.out.println("上传文件成功");
      }catch (Exception e) {
        System.out.println("上传文件失败");
        e.printStackTrace();
      }finally{
        if(ftpClient.isConnected()){
          try{
            ftpClient.disconnect();
          }catch(IOException e){
            e.printStackTrace();
          }
        }
        if(null != inputStream){
          try {
            inputStream.close();
          } catch (IOException e) {
            e.printStackTrace();
          }
        }
      }
      return true;
    }
    /**
     * 上传文件
     * @param pathname ftp服务保存地址
     * @param fileName 上传到ftp的文件名
     * @param inputStream 输入文件流
     * @return
     */
    public boolean uploadFile( String pathname, String fileName,InputStream inputStream){
      boolean flag = false;
      try{
        System.out.println("开始上传文件");
        initFtpClient();
        ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);
        CreateDirecroty(pathname);
        ftpClient.makeDirectory(pathname);
        ftpClient.changeWorkingDirectory(pathname);
        ftpClient.storeFile(fileName, inputStream);
        inputStream.close();
        ftpClient.logout();
        flag = true;
        System.out.println("上传文件成功");
      }catch (Exception e) {
        System.out.println("上传文件失败");
        e.printStackTrace();
      }finally{
        if(ftpClient.isConnected()){
          try{
            ftpClient.disconnect();
          }catch(IOException e){
            e.printStackTrace();
          }
        }
        if(null != inputStream){
          try {
            inputStream.close();
          } catch (IOException e) {
            e.printStackTrace();
          }
        }
      }
      return true;
    }
    //改变目录路径
     public boolean changeWorkingDirectory(String directory) {
        boolean flag = true;
        try {
          flag = ftpClient.changeWorkingDirectory(directory);
          if (flag) {
           System.out.println("进入文件夹" + directory + " 成功!"); 

          } else {
            System.out.println("进入文件夹" + directory + " 失败!开始创建文件夹");
          }
        } catch (IOException ioe) {
          ioe.printStackTrace();
        }
        return flag;
      } 

    //创建多层目录文件,如果有ftp服务器已存在该文件,则不创建,如果无,则创建
    public boolean CreateDirecroty(String remote) throws IOException {
      boolean success = true;
      String directory = remote + "/";
      // 如果远程目录不存在,则递归创建远程服务器目录
      if (!directory.equalsIgnoreCase("/") && !changeWorkingDirectory(new String(directory))) {
        int start = 0;
        int end = 0;
        if (directory.startsWith("/")) {
          start = 1;
        } else {
          start = 0;
        }
        end = directory.indexOf("/", start);
        String path = "";
        String paths = "";
        while (true) {
          String subDirectory = new String(remote.substring(start, end).getBytes("GBK"), "iso-8859-1");
          path = path + "/" + subDirectory;
          if (!existFile(path)) {
            if (makeDirectory(subDirectory)) {
              changeWorkingDirectory(subDirectory);
            } else {
              System.out.println("创建目录[" + subDirectory + "]失败");
              changeWorkingDirectory(subDirectory);
            }
          } else {
            changeWorkingDirectory(subDirectory);
          } 

          paths = paths + "/" + subDirectory;
          start = end + 1;
          end = directory.indexOf("/", start);
          // 检查所有目录是否创建完毕
          if (end <= start) {
            break;
          }
        }
      }
      return success;
    } 

   //判断ftp服务器文件是否存在
    public boolean existFile(String path) throws IOException {
        boolean flag = false;
        FTPFile[] ftpFileArr = ftpClient.listFiles(path);
        if (ftpFileArr.length > 0) {
          flag = true;
        }
        return flag;
      }
    //创建目录
    public boolean makeDirectory(String dir) {
      boolean flag = true;
      try {
        flag = ftpClient.makeDirectory(dir);
        if (flag) {
          System.out.println("创建文件夹" + dir + " 成功!"); 

        } else {
          System.out.println("创建文件夹" + dir + " 失败!");
        }
      } catch (Exception e) {
        e.printStackTrace();
      }
      return flag;
    } 

    /** * 下载文件 *
    * @param pathname FTP服务器文件目录 *
    * @param filename 文件名称 *
    * @param localpath 下载后的文件路径 *
    * @return */
    public boolean downloadFile(String pathname, String filename, String localpath){
      boolean flag = false;
      OutputStream os=null;
      try {
        System.out.println("开始下载文件");
        initFtpClient();
        //切换FTP目录
        ftpClient.changeWorkingDirectory(pathname);
        FTPFile[] ftpFiles = ftpClient.listFiles();
        for(FTPFile file : ftpFiles){
          if(filename.equalsIgnoreCase(file.getName())){
            File localFile = new File(localpath + "/" + file.getName());
            os = new FileOutputStream(localFile);
            ftpClient.retrieveFile(file.getName(), os);
            os.close();
          }
        }
        ftpClient.logout();
        flag = true;
        System.out.println("下载文件成功");
      } catch (Exception e) {
        System.out.println("下载文件失败");
        e.printStackTrace();
      } finally{
        if(ftpClient.isConnected()){
          try{
            ftpClient.disconnect();
          }catch(IOException e){
            e.printStackTrace();
          }
        }
        if(null != os){
          try {
            os.close();
          } catch (IOException e) {
            e.printStackTrace();
          }
        }
      }
      return flag;
    } 

    /** * 删除文件 *
    * @param pathname FTP服务器保存目录 *
    * @param filename 要删除的文件名称 *
    * @return */
    public boolean deleteFile(String pathname, String filename){
      boolean flag = false;
      try {
        System.out.println("开始删除文件");
        initFtpClient();
        //切换FTP目录
        ftpClient.changeWorkingDirectory(pathname);
        ftpClient.dele(filename);
        ftpClient.logout();
        flag = true;
        System.out.println("删除文件成功");
      } catch (Exception e) {
        System.out.println("删除文件失败");
        e.printStackTrace();
      } finally {
        if(ftpClient.isConnected()){
          try{
            ftpClient.disconnect();
          }catch(IOException e){
            e.printStackTrace();
          }
        }
      }
      return flag;
    } 

    public static void main(String[] args) {
      FtpUtils ftp =new FtpUtils();
      //ftp.uploadFile("ftpFile/data", "123.docx", "E://123.docx");
      //ftp.downloadFile("ftpFile/data", "123.docx", "F://");
      ftp.deleteFile("ftpFile/data", "123.docx");
      System.out.println("ok");
    }
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2018-06-08

JavaWeb实现多文件上传及zip打包下载

本文实例为大家分享了javaweb多文件上传及zip打包下载的具体代码,供大家参考,具体内容如下 项目中经常会使用到文件上传及下载的功能.本篇文章总结场景在JavaWeb环境下,多文件上传及批量打包下载功能,包括前台及后台部分. 首先明确一点: 无法通过页面的无刷新ajax请求,直接发下载.上传请求.上传和下载,均需要在整页请求的基础上实现.项目中一般通过构建form表单形式实现这一功能. 一.多文件上传 项目需求为实现多图片上传功能.参考测试了网上找到的众多插件方法后,决定选用Jquery原始

java实现文件上传下载至ftp服务器

以前做的一个项目,用到了文件上传下载至ftp服务器,现在对其进行一下复习,比较简单,一下就能看明白. 环境:首先,先安装ftp服务器,我是在win8本地用IIS配置的, 百度一下就可以找到安装文档. 1.在你的项目目录下建立ftp配置文件,目录如下图 01 ftpconfig.properties: ftpIp=10.73.222.29 ftpPort=21 ftpUser=WP ftpPwd=04143114wp ftpRemotePath=d://share 02 读取ftpconfig.p

Java文件上传与文件下载实现方法详解

本文实例讲述了Java文件上传与文件下载实现方法.分享给大家供大家参考,具体如下: Java文件上传 数据上传是客户端向服务器端上传数据,客户端向服务器发送的所有请求都属于数据上传.文件上传是数据上传的一种特例,指客户端向服务器上传文件.即将保存在客户端的文件上传一个副本到服务器,并保存在服务器中. 1.上传表单要求 文件上传要求客户端提交特殊的请求--multipart请求,即包含多部分数据的请求.必须将<form/>标签的enctype属性值设为"multipart/form-d

java文件上传下载代码实例

本文实例为大家分享了java文件上传下载的具体代码,供大家参考,具体内容如下 文件上传 @RequestMapping(value="/uploadFile",method=RequestMethod.POST) public ResultObject uploadFiles(@RequestParam("file")MultipartFile file,HttpServletRequest request){ ResultObject rs = null;//返回

基于Java文件输入输出流实现文件上传下载功能

本文为大家分享了Java实现文件上传下载功能的具体代码,供大家参考,具体内容如下 前端通过form表单的enctype属性,将数据传递方式修改为二进制"流"的形式,服务端(servlet)通过  getInputStream() 获取流信息, 运用java I/O 流的基础操作将流写入到一个服务端临时创建的文件temp中,然后再次利用文件基本操作,读取并截取临时文件内容,根据其中信息创建相应的文件,将读取出来的具体信息写入,下载时,根据提交的文件名称,找到服务器端相应的文件,然后根据输

java 对象输入输出流读写文件的操作实例

java 对象输入输出流读写文件的操作实例 java 支持对对象的读写操作,所操作的对象必须实现Serializable接口. 实例代码: package vo; import java.io.Serializable; public class Animal implements Serializable { private static final long serialVersionUID = 1L; private String name; private Integer weight;

FasfDFS整合Java实现文件上传下载功能实例详解

在上篇文章给大家介绍了FastDFS安装和配置整合Nginx-1.13.3的方法,大家可以点击查看下. 今天使用Java代码实现文件的上传和下载.对此作者提供了Java API支持,下载fastdfs-client-java将源码添加到项目中.或者在Maven项目pom.xml文件中添加依赖 <dependency> <groupId>org.csource</groupId> <artifactId>fastdfs-client-java</arti

java中struts2实现文件上传下载功能实例解析

本文实例讲述了java中struts2实现文件上传下载功能实现方法.分享给大家供大家参考.具体分析如下: 1.文件上传 首先是jsp页面的代码 在jsp页面中定义一个上传标签 复制代码 代码如下: <tr>      <td align="right" bgcolor="#F5F8F9"><b>附件:</b></td>      <td bgcolor="#FFFFFF">

Spring Boot + thymeleaf 实现文件上传下载功能

最近同事问我有没有有关于技术的电子书,我打开电脑上的小书库,但是邮件发给他太大了,公司又禁止用文件夹共享,于是花半天时间写了个小的文件上传程序,部署在自己的Linux机器上. 提供功能: 1 .文件上传 2.文件列表展示以及下载 原有的上传那块很丑,写了点js代码优化了下,最后界面显示如下图: 先给出成果,下面就一步步演示怎么实现. 1.新建项目 首先当然是新建一个spring-boot工程,你可以选择在网站初始化一个项目或者使用IDE的Spring Initialier功能,都可以新建一个项目

java基于servlet编写上传下载功能 类似文件服务器

本人闲来无事,写了个servlet,实现上传下载功能.启动服务后,可以在一个局域网内当一个小小的文件服务器. 一.准备工作 下载两个jar包: commons-fileupload-1.3.1.jar commons-io-2.2.jar 二.创建一个web工程 我的工程名叫:z-upload 三.配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="ht

SocketIo+SpringMvc实现文件的上传下载功能

socketIo不仅可以用来做聊天工具,也可以实现局域网(当然你如果有外网也可用外网)内实现文件的上传和下载,下面是代码的效果演示: GIT地址: https://github.com/fengcharly/sockeio-springMvcUpload.git 部分代码如下: 服务端的代码: ChuanServer: import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.nio.c

SpringBoot实现文件上传下载功能小结

最近做的一个项目涉及到文件上传与下载.前端上传采用百度webUploader插件.有关该插件的使用方法还在研究中,日后整理再记录.本文主要介绍SpringBoot后台对文件上传与下载的处理. 单文件上传 // 单文件上传 @RequestMapping(value = "/upload") @ResponseBody public String upload(@RequestParam("file") MultipartFile file) { try { if (

Struts2 控制文件上传下载功能实例代码

之前介绍servlet3.0新特性的时候有提到过servlet API提供了一个part类来实现对文件的上传和保存,Struts其实是在其基础上做了进一步的封装,更加简单易用.至于文件下载,Struts贯彻AOP 思想,在下载之前提供对用户权限控制的API. 下面我们将详细介绍上传和下载的相关内容. 一.Struts文件上传机制 想要实现文件上传功能,页面的表单的method属性必须被指定为post,还有enctype属性必须为multipart/form-data,该值表示上传的内容将会以二进

vue-cli+axios实现文件上传下载功能(下载接收后台返回文件流)

vue-cli+axios实现附件上传下载记录: 上传: 这里用formData格式传递参数:请求成功后后台返回上传文件的对应信息. 重点是下载: ############## downloadfile(res) { var blob = new Blob([res.data], {type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=utf-8'}); //applicati