- 浏览: 182119 次
- 性别:
- 来自: 青岛
文章分类
最新评论
-
loveminer:
...
权限控制 -
killerover85:
在企业项目中如何用
weblogic ThreadPool has stuck threads -
just4you:
这排版和背景色看着真蛋疼
spring 安全框架 -
zfms:
-XX:-UseGCOverheadLimit
具体有什么 ...
java.lang.OutOfMemoryError: GC overhead limit exceeded
ftp
最近因工作需要,数据库中的数据需要从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服务关掉。
相关推荐
WebFTP是一种基于Web的FTP(File Transfer Protocol)客户端软件,允许用户通过网页浏览器进行FTP文件传输操作。在本文中,我们将深入探讨FTP的基本概念、WebFTP的工作原理以及它在实际应用中的重要性。 FTP,全称...
FTP服务器是一种用于在互联网上进行文件传输的服务,它允许用户从一台计算机(客户端)向另一台计算机(服务器)上传或下载文件。FTP(File Transfer Protocol)是这项服务的基础协议,它是一个标准网络协议,用于在...
FTP(File Transfer Protocol)是一种广泛使用的网络协议,用于在计算机之间传输文件。在这个场景中,我们将探讨如何使用Node.js中的`ftp-srv`库来创建一个简单的FTP服务器。`ftp-srv`是一个易于使用的FTP服务器模块...
在IT行业中,FTP(File Transfer Protocol)是一种广泛用于在互联网上传输文件的协议。本教程将详细介绍如何将图片传输到FTP服务器以及如何在FTP服务器上显示这些图片。 首先,我们需要理解FTP的基本工作原理。FTP...
FTP(File Transfer Protocol)是一种基于TCP/IP协议的网络协议,用于在网络上进行文件传输。本文将详细探讨如何实现FTP客户端的两个关键功能:FTPGET(下载文件)和FTPPUT(上传文件),以及这两个功能在实际应用中...
**webFTP概述** webFTP是一个基于PHP开发的在线FTP文件管理系统,它允许用户通过Web界面进行FTP服务器的文件管理和操作,极大地提升了FTP管理的便捷性和灵活性。作为一个轻量级的解决方案,webFTP使得用户无需安装...
FTP(File Transfer Protocol)是一种标准网络协议,用于在计算机网络上在客户端和服务器之间传输文件。在QT5.0中实现FTP服务器,可以让我们自定义一个能够处理文件上传和下载的服务,这对于开发文件管理或共享应用...
麒麟V10服务器搭建FTP服务 FTP(File Transfer Protocol)是一种常用的文件传输协议,麒麟V10服务器搭建FTP服务可以帮助用户快速搭建FTP服务器,实现文件的上传、下载和共享。本文将指导用户如何在麒麟V10服务器上...
详解ftp创建文件权限问题 一、问题 有一个这样的需求,admin为一个Linux为其FTP应用创建的一个有权限限制的用户,通过admin用户可以进行登录FTP服务,登录FTP服务后,创建文件夹,该文件夹的用户和用户组都是admin,...
如果用本FTP客户端登录某个FTP服务器,则先必须申请一个FTP空间,申请FTP空间时,它会给你一个FTP主机地址、用户名称、用户密码。 测试步骤: 1、项目编译并运行。 2、申请一个FTP空间(这里不讨论)。 3、输入FTP...
ftp4j是个很年轻的开源项目,但是试用后发现很好很强大,如果你找一个纯java的FTP库,要支持socks4,socks4a,socks5,http代理,就是他了! 比apache的FTPClient(不支持代理)、半商业的edtFTPj(PRO支持代理,...
实现FTP批量上传文件到指定目录功能的bat脚本: @echo off @echo delete iplist.txt @del iplist.txt @setlocal EnableDelayedExpansion @echo create upload iplist.... @for /L %%i in (51,1,52) do ( @echo ...
FTP(File Transfer Protocol)是一种广泛使用的网络协议,用于在互联网上进行文件传输。在这个开源代码库中,我们关注的是C++实现的FTP客户端或服务器端的代码,这为理解和学习FTP工作原理提供了宝贵资源。 首先,...
2. **QNAM与FTP**:虽然QNetworkAccessManager没有直接提供FTP操作的接口,但可以通过构造一个QNAM的子类并重写其内部的槽函数,来监听FTP相关的信号,从而实现FTP客户端功能。 3. **QNetworkRequest**:创建...
FTP服务器绿色单文件中文免费版(FTPserver) FTPserver这是一款免费的、绿色的(无需安装,只有一个文件)、小巧的(84KB)的FTP服务器软件。可以轻松地将它放在U盘里,邮箱里,网盘里,或者网站上随时下载,这样,就有了...
FTP Utility 2.0 是一款由柯尼卡美能达公司开发的日文版FTP客户端工具,主要用于方便用户在计算机和远程服务器之间传输文件。这款软件适用于企业或个人,特别是那些需要频繁进行文件上传和下载的用户。通过FTP ...
FTP 的两种不同工作模式:PORT(主动模式)与PASV(被动模式) 1、首先,我们要了解,FTP 工作的时候,需要用到两个连接:控制连接与数据连接,控制 连接专门用于FTP 控制命令及命令执行信息传送;数据连接专门用于...
FTP客户端绿色版安装包是一种无需正式安装即可使用的文件传输协议(FTP)客户端工具。FTP是Internet上用于在不同计算机之间交换文件的标准协议,而“绿色版”指的是这种软件不需通过传统的安装步骤,只需解压即可...
《Andftp Pro:安卓FTP传输神器的深度解析》 在当今移动设备高度发达的时代,文件传输的需求日益增长,尤其是在IT行业内。Andftp pro是一款专为安卓用户设计的专业FTP(File Transfer Protocol)传输工具,它以其...