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");
    }
} 

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

(0)

相关推荐

  • 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文件上传 数据上传是客户端向服务器端上传数据,客户端向服务器发送的所有请求都属于数据上传.文件上传是数据上传的一种特例,指客户端向服务器上传文件.即将保存在客户端的文件上传一个副本到服务器,并保存在服务器中. 1.上传表单要求 文件上传要求客户端提交特殊的请求--multipart请求,即包含多部分数据的请求.必须将<form/>标签的enctype属性值设为"multipart/form-d

  • 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利用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&qu

  • Java 客户端操作 FastDFS 实现文件上传下载替换删除功能

    FastDFS 的作者余庆先生已经为我们开发好了 Java 对应的 SDK.这里需要解释一下:作者余庆并没有及时更新最新的 Java SDK 至 Maven 中央仓库,目前中央仓库最新版仍旧是 1.27 版.所以我们需要通过 Github:https://github.com/happyfish100/fastdfs-client-java 下载项目源码,再通过命令 mvn clean install 编译打包导入 Maven 仓库使用即可. 接下来我们通过 Java API 操作 FastDF

  • EDI中JAVA通过FTP工具实现文件上传下载实例

    最近接手一个EDI项目,收获颇多.其实我在第一家公司是接触过EDI的,当初我们用EDI主要实现了订单数据传输,客户向我们下达采购订单,通过VPN及FTP工具将采购订单以约定的报文形式放到指定的文件服务器中,然后我们EDI系统会定时去文件服务器中获取报文,最后解析并生成我们的销售订单.这些年过去了,我仍记着当初用的最多的是EDI850.EDI855.  一.首先介绍一下EDI的概念 Electronic data interchange,电子数据交换. EDI其实就是把原来纸质的订单/发货通知等业

  • Java实现FTP批量大文件上传下载篇1

    本文介绍了在Java中,如何使用Java现有的可用的库来编写FTP客户端代码,并开发成Applet控件,做成基于Web的批量.大文件的上传下载控件.文章在比较了一系列FTP客户库的基础上,就其中一个比较通用且功能较强的j-ftp类库,对一些比较常见的功能如进度条.断点续传.内外网的映射.在Applet中回调JavaScript函数等问题进行详细的阐述及代码实现,希望通过此文起到一个抛砖引玉的作用. 一.引子 笔者在实施一个项目过程中出现了一种基于Web的文件上传下载需求.在全省(或全国)各地的用

  • Java使用NIO优化IO实现文件上传下载功能

    目录 1 NIO的一些基础预备知识 2 NIO为何较传统的io速度较快 3 NIO实战上传下载 3.1 url下载文件 3.2 通过NIO上传文件 1 NIO的一些基础预备知识 Java中IO流类的体系中BIO与NIO:https://blog.csdn.net/ZGL_cyy/article/details/104326458Java IO体系与NIO和BIO体系面试题 :https://blog.csdn.net/ZGL_cyy/article/details/122836368为什么使用N

  • Java实现文件上传下载以及查看功能

    目录 项目的目录结构 代码 IOUtils.java DownServlet.java UploadHandleServlet.java web.xml upload.jsp down.jsp 运行效果图 项目的目录结构 代码 IOUtils.java package cn.edu.zyt.util; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class

  • Java实现FTP批量大文件上传下载篇2

    接着上一篇进行学习java文件上传下载1. 五.断点续传 对于熟用QQ的程序员,QQ的断点续传功能应该是印象很深刻的.因为它很实用也很方面.因此,在我们的上传下载过程中,很实现了断点续传的功能. 其实断点续传的原理很简单,就在上传的过程中,先去服务上进行查找,是否存在此文件,如果存在些文件,则比较服务器上文件的大小与本地文件的大小,如果服务器上的文件比本地的要小,则认为此文件上传过程中应该可以进行断点续传. 在实现的过程中,RandomAccessFile类变得很有用.此类的实例支持对随机存取文

  • Java8实现FTP及SFTP文件上传下载

    有网上的代码,也有自己的理解,代码备份 一般连接windows服务器使用FTP,连接linux服务器使用SFTP.linux都是通过SFTP上传文件,不需要额外安装,非要使用FTP的话,还得安装FTP服务(虽然刚开始我就是这么干的). 另外就是jdk1.8和jdk1.7之前的方法有些不同,网上有很多jdk1.7之前的介绍,本篇是jdk1.8的 添加依赖Jsch-0.1.54.jar <!-- https://mvnrepository.com/artifact/com.jcraft/jsch -

  • JSP servlet实现文件上传下载和删除

    本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下 由于存储空间,对一般用户而言,就是用来操作存储文件的,所以这两天,特意看了一下windows下用servlet实现文件上传.下载和删除,下面是详细代码说明 上传: 用的是commons-fileupload-1.2.2.jar和commons-io-2.0.1.jar组件,可以去apache官网上去下载,然后放到WebRoot/WEB-INF/lib目录下 upload.html <html> <hea

  • Java实现的文件上传下载工具类完整实例【上传文件自动命名】

    本文实例讲述了Java实现的文件上传下载工具类.分享给大家供大家参考,具体如下: 这是一个在Eclipse环境下采用Java语言实现文件上传下载的工具类.和之前介绍的C#文件上传下载工具类一样,在上传时,为避免文件名在服务器中重复,采用"服务器时间(定义到毫秒)+文件名+文件后缀"的方式作为服务器上的文件名:下载过程中利用 spring mvc ResponseEntity 做文件下载,返回的是字节流,下载成功后可自定义文件的保存路径. 具体源码如下所示: package com.ut

随机推荐