- 浏览: 990154 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (223)
- JDBC技术 (29)
- Java Base (21)
- SSH框架的集合 (5)
- Javascript部分 (16)
- Sping2.5框架 (6)
- Hibernate框架 (19)
- JDBC中的数据库连接 (5)
- Ajax技术应用 (9)
- Java工具包下载 (3)
- Database (4)
- Java Web (13)
- 我的生活 (4)
- Struts2 (25)
- S2SH (1)
- Prototype (1)
- jfreeChart (5)
- JPA (7)
- JBPM (1)
- JasperReport (6)
- DWR (1)
- freeMark (2)
- IBatis (2)
- FCKeditor (2)
- POI (1)
- JQuery (6)
- JSON (1)
- JavaMail (3)
- Flex (2)
- CSS收藏夹 (1)
- 润乾报表 (2)
- 开源技术 (1)
- Android (2)
- Android_UI (1)
- Android_OS (6)
- Android_OpenLibs (3)
- Volley (1)
- JS_OpenLibs (1)
- Hessian (3)
- OS (1)
最新评论
-
damoluomu:
简单易懂
Java Web开发Session超时设置 -
di1984HIT:
学习了~~~~~~
Java Web开发Session超时设置 -
lord_is_layuping:
...
Java Web开发Session超时设置 -
15111285554:
...
Java Web开发Session超时设置 -
sfg1314:
暂停后重新下载就会报错:ClientAbortExceptio ...
Java Web 文件下载之断点续传
最近因工作需要,数据库中的数据需要从FTP服务中抽取数据文件然后校检再抽取到数据中。因为第一步需要从FTP服务中抽取数据文件。第二步采用JDBC批量数据更新。
1。采用Apache.FTPClient:
/** * Apache.FTPClient FTP操作共公类 * * @author 张明学 * */ public class FTPCommon { private FTPClient ftpClient; private FTPModel ftpModel; public FTPCommon(FTPModel ftp) { super(); // 从配置文件中读取初始化信息 this.ftpClient = new FTPClient(); this.ftpModel = ftp; } /** * 连接并登录FTP服务器 * */ public boolean ftpLogin() { boolean isLogin = false; FTPClientConfig ftpClientConfig = new FTPClientConfig( FTPClientConfig.SYST_NT); ftpClientConfig.setServerTimeZoneId(TimeZone.getDefault().getID()); this.ftpClient.setControlEncoding("GBK"); this.ftpClient.configure(ftpClientConfig); try { if (this.ftpModel.getPort() > 0) { this.ftpClient.connect(ftpModel.getUrl(), ftpModel.getPort()); } else { this.ftpClient.connect(ftpModel.getUrl()); } // FTP服务器连接回答 int reply = this.ftpClient.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { this.ftpClient.disconnect(); return isLogin; } this.ftpClient.login(this.ftpModel.getUsername(), this.ftpModel .getPassword()); this.ftpClient.changeWorkingDirectory(this.ftpModel.getRemoteDir()); this.ftpClient.setFileType(FTPClient.FILE_STRUCTURE); LogUtil.infoOutPut("成功登陆FTP服务器:" + this.ftpModel.getUrl() + " 端口号:" + this.getFtpModel().getPort() + " 目录:" + this.ftpModel.getRemoteDir()); isLogin = true; } catch (SocketException e) { e.printStackTrace(); LogUtil.logPrint("连接FTP服务失败!", Constants.LOG_EXCEPTION); LogUtil.logPrint(e.getMessage(), Constants.LOG_EXCEPTION); } catch (IOException e) { e.printStackTrace(); LogUtil.logPrint("登录FTP服务失败!", Constants.LOG_EXCEPTION); LogUtil.logPrint(e.getMessage(), Constants.LOG_EXCEPTION); } System.out.println(this.ftpClient.getBufferSize()); this.ftpClient.setBufferSize(1024 * 2); this.ftpClient.setDataTimeout(2000); return isLogin; } /** * 退出并关闭FTP连接 * */ public void close() { if (null != this.ftpClient && this.ftpClient.isConnected()) { try { boolean reuslt = this.ftpClient.logout();// 退出FTP服务器 if (reuslt) { LogUtil.info("退出并关闭FTP服务器的连接"); } } catch (IOException e) { e.printStackTrace(); LogUtil.exception("退出FTP服务器异常!"); LogUtil.exception(e.getMessage()); } finally { try { this.ftpClient.disconnect();// 关闭FTP服务器的连接 } catch (IOException e) { e.printStackTrace(); LogUtil.exception("关闭FTP服务器的连接异常!"); LogUtil.exception(e.getMessage()); } } } } /** * 检查FTP服务器是否关闭 ,如果关闭接则连接登录FTP * * @return */ public boolean isOpenFTPConnection() { boolean isOpen = false; if (null == this.ftpClient) { return false; } try { // 没有连接 if (!this.ftpClient.isConnected()) { isOpen = this.ftpLogin(); } } catch (Exception e) { e.printStackTrace(); LogUtil.exception("FTP服务器连接登录异常!"); LogUtil.exception(e.getMessage()); isOpen = false; } return isOpen; } /** * 设置传输文件的类型[文本文件或者二进制文件] * * @param fileType--FTPClient.BINARY_FILE_TYPE,FTPClient.ASCII_FILE_TYPE */ public void setFileType(int fileType) { try { this.ftpClient.setFileType(fileType); } catch (IOException e) { e.printStackTrace(); LogUtil.exception("设置传输文件的类型异常!"); LogUtil.exception(e.getMessage()); } } /** * 下载文件 * * @param localFilePath * 本地文件名及路径 * @param remoteFileName * 远程文件名称 * @return */ public boolean downloadFile(String localFilePath, String remoteFileName) { BufferedOutputStream outStream = null; boolean success = false; try { outStream = new BufferedOutputStream(new FileOutputStream( localFilePath)); success = this.ftpClient.retrieveFile(remoteFileName, outStream); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (outStream != null) { try { outStream.flush(); outStream.close(); } catch (IOException e) { e.printStackTrace(); } } } return success; } /** * 下载文件 * * @param localFilePath * 本地文件 * @param remoteFileName * 远程文件名称 * @return */ public boolean downloadFile(File localFile, String remoteFileName) { BufferedOutputStream outStream = null; FileOutputStream outStr = null; boolean success = false; try { outStr = new FileOutputStream(localFile); outStream = new BufferedOutputStream(outStr); success = this.ftpClient.retrieveFile(remoteFileName, outStream); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (null != outStream) { try { outStream.flush(); outStream.close(); } catch (IOException e) { e.printStackTrace(); } } } catch (Exception e) { e.printStackTrace(); } finally { if (null != outStr) { try { outStr.flush(); outStr.close(); } catch (IOException e) { e.printStackTrace(); } } } } return success; } /** * 上传文件 * * @param localFilePath * 本地文件路径及名称 * @param remoteFileName * FTP 服务器文件名称 * @return */ public boolean uploadFile(String localFilePath, String remoteFileName) { BufferedInputStream inStream = null; boolean success = false; try { inStream = new BufferedInputStream(new FileInputStream( localFilePath)); success = this.ftpClient.storeFile(remoteFileName, inStream); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (inStream != null) { try { inStream.close(); } catch (IOException e) { e.printStackTrace(); } } } return success; } /** * 上传文件 * * @param localFilePath * 本地文件 * @param remoteFileName * FTP 服务器文件名称 * @return */ public boolean uploadFile(File localFile, String remoteFileName) { BufferedInputStream inStream = null; boolean success = false; try { inStream = new BufferedInputStream(new FileInputStream(localFile)); success = this.ftpClient.storeFile(remoteFileName, inStream); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (inStream != null) { try { inStream.close(); } catch (IOException e) { e.printStackTrace(); } } } return success; } /** * 变更工作目录 * * @param remoteDir--目录路径 */ public void changeDir(String remoteDir) { try { this.ftpClient.changeWorkingDirectory(remoteDir); LogUtil.info("变更工作目录为:" + remoteDir); } catch (IOException e) { e.printStackTrace(); LogUtil.exception("变更工作目录为:" + remoteDir + "时出错!"); LogUtil.exception(e.getMessage()); } } /** * 变更工作目录 * * @param remoteDir--目录路径 */ public void changeDir(String[] remoteDirs) { String dir = ""; try { for (int i = 0; i < remoteDirs.length; i++) { this.ftpClient.changeWorkingDirectory(remoteDirs[i]); dir = dir + remoteDirs[i] + "/"; } LogUtil.info("变更工作目录为:" + dir); } catch (IOException e) { e.printStackTrace(); LogUtil.exception("变更工作目录为:" + dir + "时出错!"); LogUtil.exception(e.getMessage()); } } /** * 返回上级目录 * */ public void toParentDir(String[] remoteDirs) { try { for (int i = 0; i < remoteDirs.length; i++) { this.ftpClient.changeToParentDirectory(); } LogUtil.info("返回上级目录"); } catch (IOException e) { e.printStackTrace(); LogUtil.exception("返回上级目录时出错!"); LogUtil.exception(e.getMessage()); } } /** * 返回上级目录 * */ public void toParentDir() { try { this.ftpClient.changeToParentDirectory(); LogUtil.info("返回上级目录"); } catch (IOException e) { e.printStackTrace(); LogUtil.exception("返回上级目录时出错!"); LogUtil.exception(e.getMessage()); } } /** * 获得FTP 服务器下所有的文件名列表 * * @param regex * @return */ public String[] getListFiels() { String files[] = null; try { files = this.ftpClient.listNames(); } catch (IOException e) { e.printStackTrace(); } return files; } public FTPClient getFtpClient() { return ftpClient; } public FTPModel getFtpModel() { return ftpModel; } public void setFtpModel(FTPModel ftpModel) { this.ftpModel = ftpModel; } }
2。采用FTP4J:
/** * ftp4j FTP操作共公类 * * @author 张明学 * */ public class FTP4JCommon { FTPClient ftpClient = null; FTPModel ftpModel = null; public FTP4JCommon() { } public FTP4JCommon(FTPModel ftpModel) { this.ftpModel = ftpModel; } /** * 连接并登录FTP服务器 * */ public boolean ftpLogin() { ftpClient = new FTPClient(); try { // 建立连接 ftpClient.connect(ftpModel.getUrl()); ftpClient.setType(FTPClient.TYPE_AUTO); ftpClient.setCharset("GBK"); } catch (Exception e) { e.printStackTrace(); LogUtil.infoOutPut("与FTP服务器建立连接失败!"); LogUtil.exception(e.getMessage()); } try { ftpClient.login(ftpModel.getUsername(), ftpModel.getPassword()); } catch (Exception e) { e.printStackTrace(); LogUtil.infoOutPut("登录FTP服务器失败!"); LogUtil.exception(e.getMessage()); } return true; } /** * 退出并关闭FTP连接 * */ public void close() { if (null != ftpClient) { try { ftpClient.disconnect(true); } catch (Exception e) { e.printStackTrace(); LogUtil.infoOutPut("安全退出FTP服务时异常!"); LogUtil.exception(e.getMessage()); } } } /** * 下载文件 * * @param localFilePath * 本地文件名及路径 * @param remoteFileName * 远程文件名称 * @return * @throws Exception */ public void downloadFile(String localFilePath, String remoteFileName) throws Exception { File localFile = new File(localFilePath); try { ftpClient.download(remoteFileName, localFile); } catch (Exception e) { e.printStackTrace(); LogUtil.infoOutPut("下载" + remoteFileName + "时出现异常!"); LogUtil.exception(e.getMessage()); throw e; } } /** * 下载文件 * * @param localFilePath * 本地文件名及路径 * @param remoteFileName * 远程文件名称 * @return * @throws Exception */ public void downloadFile(File localFile, String remoteFileName) throws Exception { try { ftpClient.download(remoteFileName, localFile); } catch (Exception e) { e.printStackTrace(); LogUtil.infoOutPut("下载" + remoteFileName + "时出现异常!"); LogUtil.exception(e.getMessage()); throw e; } } /** * 获得FTP 服务器下所有的文件名列表 * * @param regex * @return */ public String[] getListFiels() { String fileNames[] = null; try { fileNames = this.ftpClient.listNames(); } catch (Exception e) { e.printStackTrace(); LogUtil.infoOutPut("获取文件名列表时出现异常!"); LogUtil.exception(e.getMessage()); } return fileNames; } public FTPModel getFtpModel() { return ftpModel; } public void setFtpModel(FTPModel ftpModel) { this.ftpModel = ftpModel; } public FTPClient getFtpClient() { return ftpClient; } }
3。采用:jftp下载
/** * jftp FTP下载操作 * * @author 张明学 * */ public class JFTPDownloadCommon implements ConnectionListener { private boolean isThere = false; public static long time = 0; private FTPModel ftpModel = null; private ConnectionHandler handler = new ConnectionHandler(); private FtpConnection ftpcon = null; public JFTPDownloadCommon(FTPModel ftpModel) { this.ftpModel = ftpModel; // 登录FTP this.ftpLogin(); } /** * 连接并登录FTP服务器 * */ public boolean ftpLogin() { ftpcon = new FtpConnection(this.ftpModel.getUrl()); ftpcon.addConnectionListener(this); ftpcon.setConnectionHandler(handler); // 登录 ftpcon.login(ftpModel.getUsername(), ftpModel.getPassword()); while (!isThere) { try { Thread.sleep(10); } catch (Exception ex) { ex.printStackTrace(); } } LogUtil.infoOutPut("是否登录成功:" + isThere); return isThere; } /** * 关闭与FTP服务器的连接 * */ public void close() { ftpcon.disconnect(); LogUtil.infoOutPut("关闭与FTP的连接"); } /** * 获得FTP 服务器下所有的文件名列表 * * @param regex * @return */ public String[] getListFiels() { ftpcon.exists(""); Vector fileNameVector = ftpcon.currentFiles; String[] fileNames = new String[fileNameVector.size()]; int i = 0; for (Iterator iter = fileNameVector.iterator(); iter.hasNext();) { String name = (String) iter.next(); fileNames[i] = name; i++; } return fileNames; } /** * 将FTP服务器上的file下载为bype型数据 * * @param remoteFileName * 文件名 * @return */ public byte[] downloadToBinary(String remoteFileName) { Settings.bufferSize = 16384; long current = System.currentTimeMillis(); byte[] bytes = null; try { InputStream is = ftpcon.getDownloadInputStream(remoteFileName); ByteArrayOutputStream bais = new ByteArrayOutputStream(); int bit = 0; while ((bit = is.read()) != -1) { bais.write(bit); } bytes = bais.toByteArray(); } catch (Exception e) { } time = (System.currentTimeMillis() - current); System.out.println("下载花费时间:" + time + "ms."); return bytes; } /** * 下载FTP服务器文件 * * @param remoteFileName * FTP服务器文件名 * @param localFile * 本地文件名 * @return * @throws Exception */ public void downloadToBinary(String remoteFileName, File localFile) throws Exception { Settings.bufferSize = 16384; byte[] bytes = null; InputStream is = ftpcon.getDownloadInputStream(remoteFileName); ByteArrayOutputStream bais = new ByteArrayOutputStream(); int bit = 0; while ((bit = is.read()) != -1) { bais.write(bit); } bytes = bais.toByteArray(); CopyByteDataToLoacal(localFile, bytes); } /** * 将二进制文件下载到本地 * * @param localFile * 目标文件名 * @param fileDatas * 文件数据 * @throws IOException */ public void CopyByteDataToLoacal(File localFile, byte[] fileDatas) throws IOException { FileOutputStream fileOutStream = null; BufferedOutputStream bufferOutStream = null; try { if (localFile.exists()) { localFile.delete(); } fileOutStream = new FileOutputStream(localFile); bufferOutStream = new BufferedOutputStream(fileOutStream); bufferOutStream.write(fileDatas); } catch (FileNotFoundException e) { LogUtil.exception(e.getMessage()); throw e; } catch (IOException e) { LogUtil.exception(e.getMessage()); throw e; } finally { try { if (null != bufferOutStream) { bufferOutStream.flush(); bufferOutStream.close(); } } catch (IOException e) { e.printStackTrace(); } finally { if (null != fileOutStream) { try { fileOutStream.flush(); fileOutStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } } public void connectionFailed(BasicConnection arg0, String arg1) { LogUtil.infoOutPut("与FTP服务器连接失败!"); } public void connectionInitialized(BasicConnection arg0) { isThere = true; } public void updateRemoteDirectory(BasicConnection arg0) { } public void updateProgress(String arg0, String arg1, long arg2) { } public void actionFinished(BasicConnection arg0) { } }
上面都用到了一个ftpModel如下(get,set方法省了):
/** * FTP实体对象 * * @author 张明学 * */ public class FTPModel { private String ftpId; private String username; private String password; private String url; private int port; private String remoteDir; public FTPModel() { } public FTPModel(String username, String password, String url, int port, String remoteDir) { this.username = username; this.password = password; this.url = url; this.port = port; this.remoteDir = remoteDir; } }
上述仅仅列出了一点常用的操作,更多的操作需要参看它的们API文件。
还有,我采用的Serv-U作为FTP服务器,按装之后新建用户不法登录。后来找到了原因是:要把IIS服务中的FTP服务关掉。
- jar下载.rar (2.5 MB)
- 下载次数: 1049
评论
6 楼
sking945
2015-08-21
感谢!提供jar包!
5 楼
12345678
2011-12-26
感谢!!!!
4 楼
zzlong
2011-04-16
请问LogUtil类是自己写的吗?
3 楼
xiaobojava
2010-07-31
可以,可以更换目录
/**
277. * 变更工作目录
278. *
279. * @param remoteDir--目录路径
280. */
281. public void changeDir(String remoteDir) {
282. try {
283. this.ftpClient.changeWorkingDirectory(remoteDir);
284. LogUtil.info("变更工作目录为:" + remoteDir);
285. } catch (IOException e) {
286. e.printStackTrace();
287. LogUtil.exception("变更工作目录为:" + remoteDir + "时出错!");
288. LogUtil.exception(e.getMessage());
289. }
290.
291. }
/**
277. * 变更工作目录
278. *
279. * @param remoteDir--目录路径
280. */
281. public void changeDir(String remoteDir) {
282. try {
283. this.ftpClient.changeWorkingDirectory(remoteDir);
284. LogUtil.info("变更工作目录为:" + remoteDir);
285. } catch (IOException e) {
286. e.printStackTrace();
287. LogUtil.exception("变更工作目录为:" + remoteDir + "时出错!");
288. LogUtil.exception(e.getMessage());
289. }
290.
291. }
2 楼
zhanglongchao
2010-07-30
public String[] getListFiels() {
String files[] = null;
try {
files = this.ftpClient.listNames();
} catch (IOException e) {
e.printStackTrace();
}
return files;
}
这个方法只能获取一级目录下的文件名称,如何目录层次多了又如何办了?
String files[] = null;
try {
files = this.ftpClient.listNames();
} catch (IOException e) {
e.printStackTrace();
}
return files;
}
这个方法只能获取一级目录下的文件名称,如何目录层次多了又如何办了?
1 楼
zhanglongchao
2010-07-30
我想问一下,如何ftp服务器上的目录中包括多个子目录,子目录中还有文件,如何把这些名称都拿出来啊
发表评论
-
Java Web 文件下载之断点续传
2013-07-24 10:43 13422断点续传,听上去似乎是个比较高级的话题,本文 ... -
Java Web开发Session超时设置
2013-04-12 10:17 113060在Java Web开发中,Session为我们提供了很多方便 ... -
Web文件下载注意事项
2012-11-29 00:11 2018一、Content-Disposition的设 ... -
Java Web上传组件使用:Commons-fileupload
2010-11-04 19:47 6807Apache的上传组件其它已经被封装到Struts那中去了, ... -
Java Web上传组件使用:Cos
2010-11-04 19:26 10115因工作原因,已经好久没有上线也有更新博客了,比较了一下比较常用 ... -
Java Web上传组件使用:JSPUpload
2010-08-14 16:11 11144关于JSPUpload的介绍可以去google一下,jar和使 ... -
解决Java web开发中的中文问题
2010-03-23 20:01 1279说明:转载于:http://www.blogjava.net/ ... -
设置文件下载时客户端显示的附件中文名
2010-03-23 19:03 5069/** * 设置下载文件中文件的名称 * ... -
Struts中的图形报表
2009-04-27 19:33 1717我在只实现了柱状图,其它的图形可以参看我的JavaWeb部门的 ... -
JavaWeb图形报表柱状图
2009-04-27 19:29 2260步骤说明:1,导入log4j.jar,jfreechart-0 ... -
JavaWeb图形报表折线图
2009-04-27 19:25 3816步骤说明:1,导入log4j.jar,jfreechart-0 ... -
JavaWeb图形报表饼状图
2009-04-27 19:19 5197步骤说明:1,导入log4j.jar,jfreechart-0 ...
相关推荐
### Java常用FTP文件操作详解:Apache.FTPClient, ftp4j, jftp 在Java开发过程中,通过FTP(File Transfer Protocol)进行文件传输是一项常见需求。本文将详细讲解三种常用的FTP客户端库——Apache.FTPClient、ftp4...
在Java中,进行FTP(File Transfer Protocol)文件操作时,通常会使用第三方库,如Apache的FTPClient、ftp4j和jftp等。本文将主要讲解如何使用Apache的FTPClient库进行FTP文件操作。 Apache.FTPClient是一个功能...
sun.net.ftp.FtpClient,it.sauronsoftware.ftp4j.FTPClient,org.apache.commons.net.ftp.FTPClient三种不同的方式操作FTP
在本文中,我们将深入探讨如何使用`org.apache.commons.net.ftp.FTPClient`包来实现简单的文件下载功能。这个过程涉及到几个关键步骤,包括连接到FTP服务器、登录、设置传输模式、下载文件以及断开连接。 首先,你...
org.apache.commons.net.ftp.FTPClient包,不错,在实际项目和产品中使用过。
FTP应用的jar包,主要用于java开发FTP上传下载
org.apache.commons.net.ftp.FTPClient FTP工具类,实现上传、下载、压缩到输出流下载等功能
在本文中,我们将深入探讨如何使用Apache Commons Net库和Java内置的`sun.net.ftp.FtpClient`来实现FTP(文件传输协议)的功能,包括上传、下载、批量操作以及删除文件。这两个库提供了丰富的API,使得在Java应用...
.net.ftp.FTPClient jar ,exaple, commons-net-2.0.jar
EDTFTPJ是一个Java库,专门用于实现FTP(文件传输协议)和SFTP(安全文件传输协议)功能。它的核心类`com.enterprisedt.net.ftp.FTPClient`提供了全面的API,允许开发者在Java应用程序中进行各种复杂的文件上传、...
在3.3版本中,`org.apache.commons.net.ftp.FTPClient`类是实现FTP通信的核心组件。这个类提供了一系列方法,允许开发者与FTP服务器进行交互,执行如上传、下载、删除文件、创建目录等操作。 FTPClient类的主要功能...
这个库编译后生成的System.Net.FtpClient.dll文件,为开发者提供了与FTP服务器交互的接口,极大地简化了FTP操作的复杂性。 首先,我们要了解FTP(File Transfer Protocol),它是互联网上最常用的一种文件传输协议...
上传了收集的最新的 commons-io-2.4.jar 包 和 commons-net-3.3.jar 以及 FTP java调用例子。net 包是一个用于操作Internet基础协议(Finger,Whois,TFTP,Telnet,POP3,FTP,NNTP,以及SMTP)的底层API。Net包...
org.apache.commons.net.ftp的官方完整jar包 放心使用
C#的FTP操作类库,支持FTP文件的上传,下载等等,封装好的可直接引用FtpClient; 如果自己单枪匹马写一个连接ftp服务器代码那是相当恐怖的(socket通信),有一个评价较高的dll库可以供我们使用。 那就是System...
com.enterprisedt.net.ftp.FTPClient类库的jar包 edtFTPj-1.5.3.jar
com.enterprisedt.net.ftp.FTPClient类库的jar包,可以用来实现对FTP服务器端的处理。