- 浏览: 797779 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (151)
- Java-Basic (25)
- Java-NIO (3)
- Java-Mybatis (4)
- Java-Web (15)
- DB-oracle (18)
- DB-mysql (29)
- DB-sqlserver (4)
- DB-postgresql (2)
- DB-SQLite (1)
- DB-H2 (6)
- Tool-Flex (1)
- Tool-Ftp (3)
- Tool-Maven (5)
- Netlink (2)
- Web-CSS (3)
- Web-UI (1)
- Web-JavaScript (8)
- NoSQL (3)
- Mina (2)
- TCPUDP (2)
- SEO (2)
- Network (6)
- DataStructure (1)
- Website-test (1)
- Tool-Excel (1)
- Java-Concurrent (2)
- 前辈指点 (0)
- Eclipse plugins (1)
- DB-NoSQL (1)
最新评论
-
18322696278:
My97DatePicker控件显示时分秒 -
dllhenu:
你好,我让ol加载tiptip,但是tiptip没有在点所在的 ...
OpenLayers下使用Jquery tooltip(Qtip)让要素信息自动显示或隐藏 -
boonya:
你所说的是网页上选择文件路径吧,用ServletFileUpl ...
Apache提供的FTP文件上传下载 -
淡然若水:
我也是用这种方法啊。。。但是FileInputStream i ...
Apache提供的FTP文件上传下载 -
liuweihug:
json序列化反序列化插件-json2.js 介绍和使用 - ...
Json 数据反序列化为Java对象
基于Apache FTP实现文件上传下载工具 ,上传文件时需要考虑以下问题(实例未实现续传功能):
(1)、 FTP服务器是否存在改目录,如果不存在目录则需要创建目录。
(2)、判断上传文件是否已经存在,如果存在是需要删除后再上传还是续传。
(1)、 FTP服务器是否存在改目录,如果不存在目录则需要创建目录。
(2)、判断上传文件是否已经存在,如果存在是需要删除后再上传还是续传。
package com.scengine.wtms.utils.ftp; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.net.SocketException; import java.net.URLEncoder; import javax.servlet.http.HttpServletResponse; import org.apache.commons.net.PrintCommandListener; 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 org.apache.commons.net.ftp.FTPReply; import com.scengine.wtms.utils.Log; public class FTPUtils { private FTPClient ftp; /** * 对象构造 设置将过程中使用到的命令输出到控制台 */ public FTPUtils() { ftp = new FTPClient(); this.ftp.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out))); } /** * 用户FTP账号登录 * * @param url * FTP地址 * @param port * FTP端口 * @param username * 用户名 * @param password * 密 码 * @return true/false 成功/失败 * @throws SocketException * @throws IOException */ private boolean login(String url, int port, String username, String password) throws SocketException, IOException { int reply; // 1. 连接FTP服务器 // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器 ftp.connect(url, port); // 2. 设置编码 // 下面三行代码必须要,而且不能改变编码格式,否则不能正确下载中文文件 ftp.setControlEncoding("UTF-8"); FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT); conf.setServerLanguageCode("zh"); // 3. 登录ftp ftp.login(username, password); // 看返回的值是不是230,如果是,表示登陆成功 reply = ftp.getReplyCode(); // 以2开头的返回值就会为真 if (!FTPReply.isPositiveCompletion(reply)) { ftp.disconnect(); Log.getLogger(this.getClass()).info(">>>>>>>>>>>>>>>>连接服务器失败!"); return false; } Log.getLogger(this.getClass()).info(">>>>>>>>>>>>>>>>>登陆服务器成功!"); return true; } /** * 释放FTP */ private void free() { if (ftp.isAvailable()) { try { // 退出FTP ftp.logout(); } catch (IOException e) { Log.getLogger(this.getClass()).error("FTP登录退出异常:" + e.getMessage()); } } if (ftp.isConnected()) { try { // 断开连接 ftp.disconnect(); } catch (IOException e) { Log.getLogger(this.getClass()).error("FTP断开连接异常:" + e.getMessage()); } } } /** * FTP文件上传 * * @param url * FTP地址 * @param port * FTP端口 * @param username * FTP用户名 * @param password * FTP密码 * @param localAdr * 上传文件名 * @param remoteAdr * 指定的FTP目录 * @return * @throws IOException */ public boolean uploadFile(String url, int port, String username, String password, String localAdr, String remoteAdr) throws IOException { // 初始表示上传失败 boolean success = false; /******验证用户登录信息*****/ try { success = login(url, port, username, password); Log.getLogger(this.getClass()).info("FTP用户登录:" + (success ? "成功!" : "失败!")); if (!success) { return success; } } catch (IOException e) { Log.getLogger(this.getClass()).error("上传文件异常:" + e.getMessage()); return success; } // 设置PassiveMode传输 ftp.enterLocalPassiveMode(); // 设置FTP文件类型为二进制,如果缺省该句 传输txt正常 但图片和其他格式的文件传输出现乱码 ftp.setFileType(FTP.BINARY_FILE_TYPE); /*****对远程目录的处理******/ String remoteFileName = remoteAdr; if (remoteAdr.contains("/")) { remoteFileName = remoteAdr.substring(remoteAdr.lastIndexOf("/") + 1); String directory = remoteAdr.substring(0, remoteAdr.lastIndexOf("/") + 1); if (!directory.equalsIgnoreCase("/") && !ftp.changeWorkingDirectory(directory)) { // 如果远程目录不存在,则递归创建远程服务器目录 int start = 0, end = 0; if (directory.startsWith("/")) { start = 1; } else { start = 0; } end = directory.indexOf("/", start); while (true) { String subDirectory = remoteAdr.substring(start, end); if (!ftp.changeWorkingDirectory(subDirectory)) { if (ftp.makeDirectory(subDirectory)) { ftp.changeWorkingDirectory(subDirectory); } else { Log.getLogger(this.getClass()).info("创建目录失败"); return false; } } start = end + 1; end = directory.indexOf("/", start); // 检查所有目录是否创建完毕 if (end <= start) { break; } } } } /*****执行文件上传******/ InputStream input = null; try { File f = new File(localAdr); // 得到目录的相应文件列表 FTPFile[] fs = ftp.listFiles(remoteFileName); Log.getLogger(this.getClass()).info("上传文件个数:" + fs.length + " ,文件名称:" + localAdr); input = new FileInputStream(f); // 保存文件remoteFileName success = ftp.storeFile(remoteFileName, input); input.close(); } catch (IOException e) { Log.getLogger(this.getClass()).info("上传文件失败:" + e.getMessage()); if (input != null) { input.close(); } } finally { Log.getLogger(this.getClass()).info("保存标识>>>" + success + "文件名称:" + localAdr + (success ? "上传成功!" : "上传失败!")); free(); } return success; } /** * 删除FTP文件 * * @param url * FTP地址 * @param port * FTP端口 * @param username * 用户名 * @param password * 密 码 * @param remoteAdr * 文件路径 * @param localAdr * 文件名称 * @return true/false 成功/失败 */ public boolean deleteFile(String url, int port, String username, String password, String remoteAdr, String localAdr) { // localAdr:要上传的文件 // remoteAdr :上传的路径 // 初始表示上传失败 boolean success = false; try { success = login(url, port, username, password); Log.getLogger(this.getClass()).info("FTP用户登录:" + (success ? "成功!" : "失败!")); if (!success) { return success; } //String codeclocalAdr = new String(localAdr.getBytes("UTF-8"), "ISO-8859-1"); //String remoteAdr_ = new String(remoteAdr.getBytes("UTF-8"), "ISO-8859-1"); // 转到指定上传目录 // remoteAdr_->remoteAdr ftp.changeWorkingDirectory(remoteAdr); FTPFile[] fs = ftp.listFiles(); // 得到目录的相应文件列表 if(fs.length>0) { // codeclocalAdr->localAdr success = ftp.removeDirectory(remoteAdr); ftp.logout(); } } catch (IOException e) { Log.getLogger(this.getClass()).error(e.getMessage()); } finally { free(); } return success; } /** * 删除FTP文件和目录 * * @param url * FTP地址 * @param port * FTP端口 * @param username * 用户名 * @param password * 密 码 * @param remoteAdr * 文件路径 * @return true/false 成功/失败 */ public boolean deleteDir(String url, int port, String username, String password, String remoteAdr) { // localAdr:要上传的文件 // remoteAdr :上传的路径 // 初始表示上传失败 boolean success = false; try { success = login(url, port, username, password); Log.getLogger(this.getClass()).info("FTP用户登录:" + (success ? "成功!" : "失败!")); if (!success) { return success; } //String codeclocalAdr = new String(localAdr.getBytes("UTF-8"), "ISO-8859-1"); //String remoteAdr_ = new String(remoteAdr.getBytes("UTF-8"), "ISO-8859-1"); // 转到指定上传目录 // remoteAdr_->remoteAdr ftp.changeWorkingDirectory(remoteAdr); FTPFile[] fs = ftp.listFiles(); // 得到目录的相应文件列表 if(fs.length>0) { // codeclocalAdr->localAdr success = ftp.removeDirectory(remoteAdr); ftp.logout(); } } catch (IOException e) { Log.getLogger(this.getClass()).error(e.getMessage()); } finally { free(); } return success; } /** * 下载FTP文件 * * @param url * FPT地址 * @param port * FTP端口 * @param username * 用户名 * @param password * 密 码 * @param remoteremoteAdr * 远程路径 * @param localAdr * 文件名称 * @param outputStream文件输出流 * @param response * Http响应 * @return true/false 成功/失败 */ public boolean downFile(String url, int port, String username, String password, String remoteremoteAdr, String localAdr, HttpServletResponse response) { boolean success = false; try { success = login(url, port, username, password); Log.getLogger(this.getClass()).info("FTP用户登录:" + (success ? "成功!" : "失败!")); if (!success) { return success; } // 转移到FTP服务器目录 ftp.changeWorkingDirectory(remoteremoteAdr); // 得到目录的相应文件列表 FTPFile[] fs = ftp.listFiles(); for (FTPFile ftpFile : fs) { if (ftpFile.getName().equals(localAdr)) { // 这个就就是弹出下载对话框的关键代码 response.setHeader("Content-disposition", "attachment;localAdr=" + URLEncoder.encode(localAdr, "UTF-8")); // 将文件保存到输出流outputStream中 File f=new File(localAdr); OutputStream os=new FileOutputStream(f); ftp.retrieveFile(new String(ftpFile.getName().getBytes("UTF-8"), "ISO-8859-1"), os); os.flush(); os.close(); } } ftp.logout(); success = true; } catch (IOException e) { e.printStackTrace(); } finally { free(); } return success; } /** * 读取FTP文件内容 * * @param url * FPT地址 * @param port * FTP端口 * @param username * 用户名 * @param password * 密 码 * @param remoteremoteAdr * 远程路径 * @param localAdr * 文件名称 * @return String 文件内容 */ public String readFileContent(String url, int port, String username, String password, String remoteremoteAdr, String localAdr) { String content = null; try { boolean success = login(url, port, username, password); Log.getLogger(this.getClass()).info("FTP用户登录:" + (success ? "成功!" : "失败!")); if (success) { // 转移到FTP服务器目录 ftp.changeWorkingDirectory(remoteremoteAdr); // 得到目录的相应文件列表 FTPFile[] fs = ftp.listFiles(); for (FTPFile ftpFile : fs) { if (ftpFile.getName().equals(localAdr)) { // 这个就就是弹出下载对话框的关键代码 // 将文件保存到输出流outputStream中 File f=new File(localAdr); ftp.retrieveFile(new String(ftpFile.getName().getBytes("UTF-8"), "ISO-8859-1"), new FileOutputStream(f)); ByteArrayOutputStream bos = new ByteArrayOutputStream(); ftp.retrieveFile(ftpFile.getName(), bos); bos.flush(); bos.close(); content = new String(bos.toByteArray(), "UTF-8"); } } } } catch (IOException e) { Log.getLogger(FTPUtils.class).error(e.getMessage()); } finally { free(); } return content; } /** * 判断是否重名的方法 * * @param localAdr * 文件名称 * @param fs * 文件列表数组 * @return */ public static boolean isDirExist(String localAdr, FTPFile[] fs) { for (FTPFile ftpFile : fs) { if (ftpFile.getName().equals(localAdr)) { return true; } } return false; } /** * 根据重名判断的结果 生成新的文件的名称 更改的重名为 原有名字+[n], n表示数字 * * @param localAdr * 文件名称 * @param fs * FTP文件列表 * @return */ public static String changeName(String localAdr, FTPFile[] fs) { int n = 0; // 创建一个可变的字符串对象 即StringBuffer对象,把localAdr值付给该对象 StringBuffer localAdr_ = new StringBuffer(""); localAdr_ = localAdr_.append(localAdr); // 重名时改名,遍历存在同名的文件 while (isDirExist(localAdr_.toString(), fs)) { n++; String a = "[" + n + "]"; // 最后一出现小数点的位置 int b = localAdr_.lastIndexOf("."); // 最后一次"["出现的位置 int c = localAdr_.lastIndexOf("["); if (c < 0) { c = b; } // 文件的名字 StringBuffer name = new StringBuffer(localAdr_.substring(0, c)); // 后缀的名称 StringBuffer suffix = new StringBuffer(localAdr_.substring(b + 1)); localAdr_ = name.append(a).append(".").append(suffix); } return localAdr_.toString(); } public static void main(String[] args) { FTPUtils ftp = new FTPUtils(); try { ftp.uploadFile("192.168.1.200", 21, "duser", "HTPDuserXP32", "C:\\Users\\Administrator\\Desktop\\backgroud_change.html", "/htmls/backgroud_change.html"); } catch (IOException e) { Log.getLogger(FTPUtils.class).error(e.getMessage()); } } }
相关推荐
- 在示例代码中,定义了一个名为`FTPStatus`的枚举类型,用于表示各种FTP文件操作的状态,如文件存在、目录创建成功/失败、上传/下载成功/失败等。这样可以方便地跟踪和处理操作结果。 6. **FTP文件操作工具类**:...
Apache FTP工具所需JAR文件是Java开发中用于与FTP服务器交互的重要组件,这些JAR库提供了方便的API,使得开发者可以轻松地实现FTP文件传输功能。以下是对这些JAR文件的详细说明: 1. `ant-jakarta-oro-1.6.1.jar`: ...
Apache FTP开源工具是一款基于Java语言实现的FTP(File Transfer Protocol)客户端库,它为开发者提供了在Java应用程序中轻松实现FTP文件传输的能力。Apache FTP工具旨在简化FTP通信过程,避免开发者从头开始编写...
本文将详细介绍如何使用Java实现简单的FTP文件上传与下载功能,并基于提供的"ftpLoadDown.jar"库和"使用方法.txt"来解析相关知识。 首先,我们需要了解FTP的基础知识。FTP是一种应用层协议,它依赖于TCP/IP协议栈,...
Apache FTP Server是一个开源的FTP服务器,它允许用户通过FTP协议上传、下载文件。这个服务器是用Java语言编写的,因此可以在任何支持Java的平台上运行,包括Windows、Linux、Unix等操作系统。Apache FTP Server的...
Java编写的FTP上传下载工具是一种基于Java语言实现的文件传输应用程序,主要功能是与FTP(File Transfer Protocol)服务器进行交互,实现文件的上传和下载。这个工具特别之处在于它支持多用户登录,这意味着不同的...
Apache FTP Server 是一个基于 Java 的开源 FTP 服务器,它提供了丰富的功能和灵活性,能够满足各种文件传输需求。在 CMMB 中广传媒项目中,为了实现更为安全和灵活的文件传输,采用了 Apache FTP Server,并将其与...
Apache Ftp Server是一款开源的FTP服务器软件,基于Java平台,由Apache软件基金会开发。它提供了高度可配置性和灵活性,使得用户可以根据自身需求定制FTP服务。本文将深入探讨Apache Ftp Server的使用方法,包括安装...
Apache FTP开发包是一个用于构建FTP(文件传输协议)客户端和服务端应用的软件包,主要基于Apache Commons Net库。这个开发包包含了多个相关的组件和库,为开发者提供了在Java环境中实现FTP功能的强大支持。 Apache...
Java FTP上传下载工具类是基于Apache的Commons Net库实现的,这个库为Java开发者提供了FTP(文件传输协议)客户端功能。Apache Commons Net是Apache软件基金会的一个项目,它提供了多种Internet协议的Java实现,包括...
在Java编程环境中,FTP(File Transfer Protocol)是一种常用的文件传输...这个项目展示了如何在Java中集成多种技术来实现一个实用的FTP文件上传工具,对于提升Java开发者在系统集成和自动化操作方面的技能有很大帮助。
在这个场景中,我们关注的是一个基于Java开发的FTP上传工具,它能够帮助用户将本地文件上传到FTP服务器。以下是一些关于FTP上传工具和相关技术的知识点: 1. **FTP基本概念**: FTP是一个应用层协议,基于TCP/IP...
### FTP的上传与下载实现详解 #### 一、引言 在互联网技术中,FTP(File Transfer Protocol)是一种用于在网络上进行文件传输的标准协议和服务。它主要用于实现计算机之间的文件传输功能,尤其是在不同操作系统...
在这个基于FTP服务器的CSV文件转换格式的文件上传下载实例中,我们将探讨如何利用FTP(File Transfer Protocol)服务进行文件的交互,以及如何处理CSV(Comma Separated Values)文件格式转换。FTP是一种标准网络...
标题中的“利用commons-net包实现ftp上传下载例子”是指通过Apache Commons Net库来实现FTP(File Transfer Protocol)的上传和下载功能。Apache Commons Net是Apache软件基金会开发的一个Java库,它提供了多种网络...
总的来说,Apache Camel FTP 组件是构建基于文件传输的集成解决方案的强大工具,通过其丰富的功能和易于使用的 API,能够简化开发工作,提升系统的可维护性和扩展性。结合提供的示例,你可以深入学习并掌握如何在...
总结来说,"ftp上传下载包.zip"提供了一套完整的FTP文件传输解决方案,包括源代码和必要的依赖库。开发者可以通过学习和使用这些资源,快速地在他们的应用程序中实现FTP上传和下载功能,无论是为了传输用户生成的...
在这个场景中,"FTP上传测试工具 java" 提供了一种基于Java语言的解决方案,用于测试FTP功能和验证与客户的FTP通信需求。Java作为一种通用且跨平台的编程语言,提供了丰富的库和API来实现FTP客户端功能。 首先,...
为了实现FTP上传和下载,你需要一个FTP客户端,它可以是命令行工具如`ftp`,也可以是图形用户界面的软件如FileZilla。FTP客户端需要知道服务器的地址(IP或域名)、端口号(默认为21)、用户名和密码。配置完成后,...
总的来说,基于SpringBoot的FtpUtil工具类为我们提供了一种便捷的方式,通过简单的调用即可实现FTP文件操作,大大简化了开发流程。配合提供的项目源码和说明,无论是初学者还是经验丰富的开发者,都能从中受益,提高...