文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何在JAVA项目中利用FTPClient工具类实现一个上传下载功能

2023-05-31 08:49

关注

如何在JAVA项目中利用FTPClient工具类实现一个上传下载功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

1、写一个javabean文件,描述ftp上传或下载的信息

实例代码:

public class FtpUseBean {   private String host;   private Integer port;   private String userName;   private String password;   private String ftpSeperator;   private String ftpPath="";   private int repeatTime = 0;//连接ftp服务器的次数      public String getHost() {     return host;   }      public void setHost(String host) {     this.host = host;   }    public Integer getPort() {     return port;   }   public void setPort(Integer port) {     this.port = port;   }         public String getUserName() {     return userName;   }      public void setUserName(String userName) {     this.userName = userName;   }      public String getPassword() {     return password;   }      public void setPassword(String password) {     this.password = password;   }    public void setFtpSeperator(String ftpSeperator) {     this.ftpSeperator = ftpSeperator;   }    public String getFtpSeperator() {     return ftpSeperator;   }    public void setFtpPath(String ftpPath) {     if(ftpPath!=null)       this.ftpPath = ftpPath;   }    public String getFtpPath() {     return ftpPath;   }    public void setRepeatTime(int repeatTime) {     if (repeatTime > 0)       this.repeatTime = repeatTime;   }    public int getRepeatTime() {     return repeatTime;   }       public String getFTPURL() {     StringBuffer buf = new StringBuffer();     buf.append("ftp://");     buf.append(getUserName());     buf.append(":");     buf.append(getPassword());     buf.append("@");     buf.append(getHost());     buf.append(":");     buf.append(getPort());     buf.append("/");     buf.append(getFtpPath());           return buf.toString();   } }

2、导入包commons-net-1.4.1.jar 

package com.util;  import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.SocketException; import java.net.URL; import java.net.URLConnection;  import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPClientConfig; import org.apache.commons.net.ftp.FTPFile;  import com.bean.FtpUseBean;  public class FtpUtil extends FTPClient {    private static Log log = LogFactory.getLog(FtpUtil.class);   private FtpUseBean ftpUseBean;   //获取目标路径下的文件属性信息,主要是获取文件的size   private FTPFile[] files;        public FtpUseBean getFtpUseBean() {     return ftpUseBean;   }     public FtpUtil(){     super();   }         public void setFtpUseBean(FtpUseBean ftpUseBean) {     this.ftpUseBean = ftpUseBean;   }      public boolean ftpLogin() {     boolean isLogined = false;     try {       log.debug("ftp login start ...");       int repeatTime = ftpUseBean.getRepeatTime();       for (int i = 0; i < repeatTime; i++) {         super.connect(ftpUseBean.getHost(), ftpUseBean.getPort());         isLogined = super.login(ftpUseBean.getUserName(), ftpUseBean.getPassword());         if (isLogined)           break;       }       if(isLogined)         log.debug("ftp login successfully ...");       else         log.debug("ftp login failed ...");       return isLogined;     } catch (SocketException e) {       log.error("", e);       return false;     } catch (IOException e) {       log.error("", e);       return false;     } catch (RuntimeException e) {       log.error("", e);       return false;     }   }    public void setFtpToUtf8() throws IOException {      FTPClientConfig conf = new FTPClientConfig();     super.configure(conf);     super.setFileType(FTP.IMAGE_FILE_TYPE);     int reply = super.sendCommand("OPTS UTF8 ON");     if (reply == 200) { // UTF8 Command       super.setControlEncoding("UTF-8");     }    }    public void close() {     if (super.isConnected()) {       try {         super.logout();         super.disconnect();         log.debug("ftp logout ....");       } catch (Exception e) {         log.error(e.getMessage());         throw new RuntimeException(e.toString());       }     }   }    public void uploadFileToFtpByIS(InputStream inputStream, String fileName) throws IOException {     super.storeFile(ftpUseBean.getFtpPath()+fileName, inputStream);   }    public File downFtpFile(String fileName, String localFileName) throws IOException {     File outfile = new File(localFileName);     OutputStream oStream = null;     try {       oStream = new FileOutputStream(outfile);       super.retrieveFile(ftpUseBean.getFtpPath()+fileName, oStream);       return outfile;     } finally {       if (oStream != null)         oStream.close();     }   }     public FTPFile[] listFtpFiles() throws IOException {     return super.listFiles(ftpUseBean.getFtpPath());   }    public void deleteFtpFiles(FTPFile[] ftpFiles) throws IOException {     String path = ftpUseBean.getFtpPath();     for (FTPFile ff : ftpFiles) {       if (ff.isFile()) {         if (!super.deleteFile(path + ff.getName()))           throw new RuntimeException("delete File" + ff.getName() + " is n't seccess");       }     }   }    public void deleteFtpFile(String fileName) throws IOException {     if (!super.deleteFile(ftpUseBean.getFtpPath() +fileName))       throw new RuntimeException("delete File" + ftpUseBean.getFtpPath() +fileName + " is n't seccess");   }    public InputStream downFtpFile(String fileName) throws IOException {     return super.retrieveFileStream(ftpUseBean.getFtpPath()+fileName);   }       public StringBuffer downloadBufferByURL(String addr) {     BufferedReader in = null;     try {       URL url = new URL(addr);       URLConnection conn = url.openConnection();       in = new BufferedReader(new InputStreamReader(conn.getInputStream()));       String line;       StringBuffer ret = new StringBuffer();       while ((line = in.readLine()) != null)         ret.append(line);              return ret;     } catch (Exception e) {       log.error(e);       return null;     } finally {       try {         if (null != in)           in.close();       } catch (IOException e) {         e.printStackTrace();         log.error(e);       }     }   }       public byte[] downloadByteByURL(String addr) {          FTPClient ftp = null;          try {              URL url = new URL(addr);              int port = url.getPort()!=-1?url.getPort():21;       log.info("HOST:"+url.getHost());       log.info("Port:"+port);       log.info("USERINFO:"+url.getUserInfo());       log.info("PATH:"+url.getPath());              ftp = new FTPClient();              ftp.setDataTimeout(30000);       ftp.setDefaultTimeout(30000);       ftp.setReaderThread(false);       ftp.connect(url.getHost(), port);       ftp.login(url.getUserInfo().split(":")[0], url.getUserInfo().split(":")[1]);       FTPClientConfig conf = new FTPClientConfig("UNIX");              ftp.configure(conf);        log.info(ftp.getReplyString());              ftp.enterLocalPassiveMode(); //ftp.enterRemotePassiveMode()        ftp.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);         int reply = ftp.sendCommand("OPTS UTF8 ON");// try to              log.debug("alter to utf-8 encoding - reply:" + reply);       if (reply == 200) { // UTF8 Command         ftp.setControlEncoding("UTF-8");       }       ftp.setFileType(FTPClient.BINARY_FILE_TYPE);        log.info(ftp.getReplyString());              ByteArrayOutputStream out=new ByteArrayOutputStream();            DataOutputStream o=new DataOutputStream(out);            String remotePath = url.getPath();                        if(remotePath.indexOf("/")==0) {              remotePath = url.getPath().replaceFirst("/", "");            }            ftp.retrieveFile(remotePath, o);             byte[] ret = out.toByteArray();       o.close();              String filepath = url.getPath();       ftp.changeWorkingDirectory(filepath.substring(0,filepath.lastIndexOf("/")));       files = ftp.listFiles();              return ret;         } catch (Exception ex) {       log.error("Failed to download file from ["+addr+"]!"+ex);        } finally {       try {         if (null!=ftp)           ftp.disconnect();       } catch (Exception e) {         //       }     }     return null; //   StringBuffer buffer = downloadBufferByURL(addr); //   return null == buffer ? null : buffer.toString().getBytes();   }               public FTPFile[] getFiles() {     return files;   }     public void setFiles(FTPFile[] files) {     this.files = files;   }   // public static void getftpfilesize(String addr){ //    //   FTPClient ftp = null; //    //   try { //      //     URL url = new URL(addr); //      //     int port = url.getPort()!=-1?url.getPort():21; //     log.info("HOST:"+url.getHost()); //     log.info("Port:"+port); //     log.info("USERINFO:"+url.getUserInfo()); //     log.info("PATH:"+url.getPath()); //      //     ftp = new FTPClient(); //      //     ftp.setDataTimeout(30000); //     ftp.setDefaultTimeout(30000); //     ftp.setReaderThread(false); //     ftp.connect(url.getHost(), port); //     ftp.login(url.getUserInfo().split(":")[0], url.getUserInfo().split(":")[1]); //     FTPClientConfig conf = new FTPClientConfig("UNIX");   //     ftp.configure(conf);  //     log.info(ftp.getReplyString()); //      //     ftp.enterLocalPassiveMode(); //ftp.enterRemotePassiveMode()  //     ftp.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);  // //     int reply = ftp.sendCommand("OPTS UTF8 ON");// try to //      //     log.debug("alter to utf-8 encoding - reply:" + reply); //     if (reply == 200) { // UTF8 Command //       ftp.setControlEncoding("UTF-8"); //     } //     ftp.setFileType(FTPClient.BINARY_FILE_TYPE); //     ftp.changeWorkingDirectory(url.getPath()); //     FTPFile[] files = ftp.listFiles(); //     for (FTPFile flie : files){ //       System.out.println(new String(flie.getName().getBytes("gbk"),"ISO8859-1")); //       System.out.println(flie.getSize()); //     } //      // //   } catch (Exception ex) { //     log.error("Failed to download file from ["+addr+"]!"+ex); //   } finally { //     try {<pre class="java" name="code">     if (null!=ftp) //     ftp.disconnect();  //     } catch (Exception e) { } } } }

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网行业资讯频道,感谢您对编程网的支持。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯