- 浏览: 144802 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (138)
- java基础 (26)
- 日常工作经验总结 (22)
- SVN学习与使用 (1)
- JBOSS学习与实践 (1)
- webService学习与实践 (4)
- redis学习与实践 (12)
- spring学习与实践 (0)
- hibernate学习与实践 (4)
- Struts2学习与实践 (0)
- mybatis学习与实践 (0)
- SpringMVC学习与实践 (0)
- jfreechart学习与使用 (0)
- javaScript学习与实践 (1)
- linux学习与实践 (4)
- Python学习与实践 (7)
- Oracle学习与实践 (21)
- Mysql学习与实践 (4)
- HTML5+CSS3学习与实践 (0)
- DIV+CSS学习与实践 (0)
- tomcat学习与实践 (1)
- mongodb学习与实践 (1)
- Git学习与实践 (2)
- hadhoop学习与实践 (0)
- shiro学习与实践 (0)
- CMS学习与实践 (0)
- Jmeter学习与实践 (0)
- java测试学习与实践 (2)
- bootstrap学习与实践 (0)
- jquery学习与实践 (0)
- Spring+hibernate+Struts2框架开发CRM项目 (0)
- JVM学习与实践 (0)
- 推荐学习网站 (1)
- 日常工作必备小技能 (4)
- Apache实践 (1)
- dubbo学习与实践 (2)
- Centos7 (6)
- 面试题目集合(收集各大网站) (4)
- 大数据学习 (1)
- 财富本 (2)
- 股票投资学习 (0)
- ZooKeeper (0)
- python切割集合里面相同的元素到一个集合里面 (1)
- 机器学习与深度学习 (1)
最新评论
-
魏叔武:
...
基于UDP协议的Socket编程
ftp上传功能是很多的应用软件都必备的一个基础功能,特别是CMS系统,这个是必须的功能:
下面就来写下ftp上传主要的功能代码吧;
第一步:准备工作:需要的jar包是:commons net 3.3.jar,commons.io.jar,这个可以在网络上找到的。版本不一定是这个的。把下载的jar包加入到maven的pom.xml或者放到lib目录下面。
commons net 3.3.jar下载地址:http://download.csdn.net/download/hdh1988/5808981
第二步:把ftp上传功能所有的功能都写,封装成一个封装类:
主要的功能有上传,下载,删除等:
第三步:异常类配置:
下面就来写下ftp上传主要的功能代码吧;
第一步:准备工作:需要的jar包是:commons net 3.3.jar,commons.io.jar,这个可以在网络上找到的。版本不一定是这个的。把下载的jar包加入到maven的pom.xml或者放到lib目录下面。
commons net 3.3.jar下载地址:http://download.csdn.net/download/hdh1988/5808981
第二步:把ftp上传功能所有的功能都写,封装成一个封装类:
主要的功能有上传,下载,删除等:
package bianliang.com; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; import org.apache.commons.io.IOUtils; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPReply; public class FtpUtil { private String ip; private int port; private String username; private String password; private boolean isPrepared = false; protected FTPClient ftpClient = null; /** * ftpConfig配置的的顺序是:ftp上传的ip#端口#登录用户名#密码 * @param ftpConfig * @throws FtpException */ public FtpUtil(String ftpConfig) throws FtpException { String[] configs = ftpConfig.split("#"); if (configs.length != 4) { throw new FtpException("FTP连接参数格式错误"); } else { this.ip = configs[0]; this.port = Integer.valueOf(configs[1]); this.username = configs[2]; this.password = configs[3]; } } /** * 登录到FTP Server * * @return * @throws FtpException */ public boolean connect() throws FtpException{ boolean result = false; try { ftpClient = new FTPClient(); ftpClient.setControlEncoding("UTF-8"); ftpClient.connect(ip, port); result = ftpClient.login(username, password); if (result) { ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); ftpClient.setBufferSize(1024 * 2); ftpClient.setDataTimeout(3000); this.isPrepared = true; return true; } else { ftpClient.disconnect(); throw new FtpException( "用户名或密码错误"); } } catch (IOException e) { ftpClient = null; throw new FtpException(e.getMessage()); } } /** * 退出登录并断开连接 * * @return * @throws FtpException */ public boolean disconnect() throws FtpException { if (!isPrepared) { throw new FtpException( "对FTP操作前应先登录"); } try { this.ftpClient.disconnect(); } catch (IOException e) { throw new FtpException(e.getMessage()); } return true; } /** * 上传文件 * * @param localFile 上传本地文件的文件名 * @param remoteFileName * @throws FtpException * @return */ public boolean uploadFile(String localFileName, String remoteFileName) throws FtpException { if (!isPrepared) { throw new FtpException( "对FTP操作前应先登录"); } checkAndCreateDirectory(remoteFileName); File localFile = new File(localFileName); boolean result = false; FileInputStream inputStream = null; try { ftpClient.enterLocalPassiveMode(); inputStream = new FileInputStream(localFile); result = ftpClient.storeFile(remoteFileName, inputStream); int code = ftpClient.getReplyCode(); if (FTPReply.isPositiveCompletion(code)) { Logger.info("FTP工具", "上传文件至FTP", "FtpUtil", "method", "uploadFile", "上传文件成功:" + this.ip + remoteFileName); } else { throw new FtpException("向FTP上传文件出错:" + this.ip + remoteFileName + "Reply Code:" + code); } } catch (IOException e) { throw new FtpException( e.getMessage()); } finally { if (inputStream != null) try { inputStream.close(); } catch (IOException e) { throw new FtpException( e.getMessage()); } } try { ftpClient.pwd();// 没有实际作用的指令,用来避免有时候上传到FTP的文件大小变为0的问题 } catch (IOException e) { throw new FtpException( e.getMessage()); } return result; } /** * 上传文件夹(包含子文件夹) * * @param localFolderPath * @param remoteFolderPath * @return * @throws FtpException */ public boolean uploadFolder(String localFolderPath, String remoteFolderPath) throws FtpException{ boolean result = false; for (String fileName : getLocalFileNameList(localFolderPath)) { String relativePath = fileName.substring(localFolderPath.length()).replaceAll("\\\\", "/"); result = uploadFile(fileName, remoteFolderPath + relativePath); } return result; } /** * 将String中的内容保存至远程指定文件 * * @param uploadString * @param remoteFileName * @throws FtpException * @return */ public boolean uploadString(String uploadString, String remoteFileName) throws FtpException{ if (!isPrepared) { throw new FtpException( "对FTP操作前应先登录"); } boolean result = false; InputStream inputStream = null; try { inputStream = new ByteArrayInputStream(uploadString.getBytes("UTF-8")); checkAndCreateDirectory(remoteFileName); ftpClient.enterLocalPassiveMode(); result = ftpClient.storeFile(remoteFileName, inputStream); int code = ftpClient.getReplyCode(); if (FTPReply.isPositiveCompletion(code)) { logger.info(log, "FTP工具", "上传字符串至FTP", "FtpUtil", "method", "uploadString", "上传字符串成功:" + this.ip +remoteFileName); } else { throw new FtpException( "向FTP上传字符串出错:" + this.ip + remoteFileName + ",Reply Code:" + code); } } catch (Exception e) { throw new FtpException( e.getMessage()); } finally { if (inputStream != null){ try { inputStream.close(); } catch (IOException e) { throw new FtpException( e.getMessage()); } } } try { ftpClient.pwd();// 没有实际作用的指令,用来避免有时候上传到FTP的文件大小变为0的问题 } catch (IOException e) { throw new FtpException( e.getMessage()); } return result; } /** * 从服务器下载文件 * * @param localFileName * @param remoteFileName * @throws FtpException */ public boolean downloadFile(String localFileName, String remoteFileName) throws FtpException { if (!isPrepared) { throw new FtpException( "对FTP操作前应先登录"); } File fileDir = new File(localFileName); if (!fileDir.getParentFile().exists()) { fileDir.getParentFile().mkdirs(); } BufferedOutputStream outputStream = null; boolean result = false; try { outputStream = new BufferedOutputStream(new FileOutputStream(localFileName)); result = this.ftpClient.retrieveFile(remoteFileName, outputStream); if (result) { logger.info(log, "FTP工具", "从FTP下载文件", "FtpUtil", "method", "downloadFile", "从FTP下载文件成功:" + localFileName); } else { throw new FtpException( "从FTP下载文件出错:" + remoteFileName); } } catch (Exception e) { throw new FtpException( e.getMessage()); } finally { if (outputStream != null) { try { outputStream.flush(); outputStream.close(); } catch (IOException e) { throw new FtpException( e.getMessage()); } } } return result; } /** * 从服务器文件获取String * * @param remoteFileName * @return String * @throws FtpException */ public String downloadString(String remoteFileName) throws FtpException{ if (!isPrepared) { throw new FtpException( "对FTP操作前应先登录"); } String result = null; try { InputStream inputStream = ftpClient.retrieveFileStream(remoteFileName); if (inputStream != null) { result = IOUtils.toString(inputStream, "UTF-8"); inputStream.close(); ftpClient.completePendingCommand(); logger.info(log, "FTP工具", "从FTP获取String", "FtpUtil", "method", "downloadString", "从FTP获取String成功:" + this.ip + remoteFileName); } else { throw new FtpException( "retrieveFileStream is null"); } } catch (IOException e) { throw new FtpException(e.getMessage()); } logger.info(log, "FTP工具", "从FTP获取String", "FtpUtil", "method", "downloadString", "从FTP获取String结束:" + this.ip + remoteFileName); return result; } /** * 获取远程路径下的所有文件名(选择性包括子文件夹) * * @param remotePath * 远程路径 * @param isAll * 是否包含子文件夹 * @return List<String> * @throws FtpException */ public List<String> getRemoteFileNameList(String remotePath, Boolean isAll) throws FtpException { if (!isPrepared) { throw new FtpException( "对FTP操作前应先登录"); } FTPFile[] ftpFiles; List<String> retList = new ArrayList<String>(); try { ftpFiles = ftpClient.listFiles(remotePath); if (ftpFiles == null || ftpFiles.length == 0) { return retList; } for (FTPFile ftpFile : ftpFiles) { if (ftpFile.isDirectory() && !ftpFile.getName().startsWith(".") && isAll) { String subPath = remotePath + "/" + ftpFile.getName(); for (String fileName : getRemoteFileNameList(subPath, true)) { retList.add(fileName); } } else if (ftpFile.isFile()) { retList.add(remotePath + "/" + ftpFile.getName()); } } } catch (IOException e) { throw new FtpException( e.getMessage()); } return retList; } /** * 下载远程路径下的所有文件(选择性包括子文件夹) * * @param remotePath * 远程地址 * @param isAll * 是否包含子文件夹 * @param localPath * 本地存放路径 * @return * @throws FtpException */ public boolean downloadFolder(String remotePath, Boolean isAll, String localPath) throws FtpException { if (!isPrepared) { throw new FtpException( "对FTP操作前应先登录"); } boolean result = false; List<String> fileNameList; fileNameList = getRemoteFileNameList(remotePath, isAll); for (String fileName : fileNameList) { String relativePath = fileName.substring(remotePath.length(), fileName.length()); String localFileName = localPath + relativePath; result = downloadFile(localFileName, fileName); } return result; } /** * 删除远程服务器上指定文件 * * @param remoteFileName * @return * @throws FtpException */ public boolean deleteFile(String remoteFileName) throws FtpException { if (!isPrepared) { throw new FtpException( "对FTP操作前应先登录"); } boolean result = false; try { result = this.ftpClient.deleteFile(remoteFileName); logger.info(log, "FTP工具", "从FTP删除文件", "FtpUtil", "method", "deleteFile", "从FTP删除文件成功:" + this.ip + remoteFileName); } catch (IOException e) { throw new FtpException( e.getMessage()); } return result; } /** * 删除远程服务器上指定文件夹(文件夹内一定要为空) * * @param remoteFolderPath * @throws FtpException */ public void deleteEmptyFolder(String remoteFolderPath) throws FtpException{ if (!isPrepared) { throw new FtpException("对FTP操作前应先登录"); } try { if (this.ftpClient.removeDirectory(remoteFolderPath)){ logger.info(log, "FTP工具", "从FTP删除文件夹", "FtpUtil", "method", "deleteEmptyFolder", "从FTP删除文件夹成功:" + this.ip + remoteFolderPath); }else { throw new FtpException( "从FTP删除文件夹出错"); } } catch (IOException e) { throw new FtpException( e.getMessage()); } } /** * 删除远程文件夹及其内的所有文件(包括子文件夹) * * @param remoteFolderPath * @throws FtpException * @throws IOException */ public void deleteFolder(String remoteFolderPath) throws FtpException{ if (!isPrepared) { throw new FtpException( "对FTP操作前应先登录"); } FTPFile[] ftpFiles; try { ftpFiles = ftpClient.listFiles(remoteFolderPath); for (FTPFile ftpFile : ftpFiles) { if (ftpFile.isFile()) { deleteFile(remoteFolderPath + "/" + ftpFile.getName()); }else if (ftpFile.isDirectory() && !ftpFile.getName().startsWith(".")){ deleteFolder(remoteFolderPath + "/" + ftpFile.getName()); } } deleteEmptyFolder(remoteFolderPath); } catch (IOException e) { throw new FtpException( e.getMessage()); } } /** * 检查远程路径是否存在,若不则递归创建文件夹 * * @param remotePath * @throws FtpException */ private void checkAndCreateDirectory(String remotePath) throws FtpException{ String directory = remotePath.substring(0,remotePath.lastIndexOf("/")+1); try { if(!directory.equalsIgnoreCase("/") &&! ftpClient.changeWorkingDirectory(directory)){ int preLocation=0; int nextLocation = 0; if(directory.startsWith("/")) preLocation = 1; nextLocation = directory.indexOf("/",preLocation); while(nextLocation > preLocation){ String subDirectory = new String(remotePath.substring(preLocation,nextLocation)); if(!ftpClient.changeWorkingDirectory(subDirectory)){ if(ftpClient.makeDirectory(subDirectory)){ ftpClient.changeWorkingDirectory(subDirectory); } } preLocation = nextLocation + 1; nextLocation = directory.indexOf("/",preLocation); } } ftpClient.changeWorkingDirectory("/"); } catch (IOException e) { throw new FtpException( e.getMessage()); } } /** * 获取本地文件夹下的所有文件名 * * @param localFolderPath * @return */ public List<String> getLocalFileNameList(String localFolderPath) { File originalFile = new File(localFolderPath); File[] files = originalFile.listFiles(); List<String> list = new ArrayList<String>(); if (files == null || files.length == 0) { return list; } for (File file : files) { if (file.isDirectory()) { String subPath = localFolderPath + "/" + file.getName(); for (String fileName : getLocalFileNameList(subPath)) { list.add(fileName); } } else if (file.isFile()) { list.add(file.getPath()); } } return list; } /** * ftp上传服务器的代码 * @param ftpFileLocaCfg 上传的文件配置,请看第一个方法 * @param filePath 上传的文件的路径地址 * @param fileName 上传的文件名称 * @return */ public boolean uploadFtpFile( String ftpFileLocaCfg, String filePath,String fileName){ boolean flag = false; FileInputStream inputStream = null; try { //是否成功登录FTP服务器 int replyCode = ftpClient.getReplyCode(); //如果reply >= 200) && (reply < 300,表示没有保存成功 if(!FTPReply.isPositiveCompletion(replyCode)){ return flag; } inputStream = new FileInputStream( new File(filePath)); ftpClient.enterLocalPassiveMode(); ftpClient.changeWorkingDirectory(ftpFileLocaCfg); //保存文件 flag = ftpClient.storeFile(fileName, inputStream); inputStream.close(); ftpClient.logout(); } catch (Exception e) { e.printStackTrace(); } finally{ if(ftpClient.isConnected()){ try { ftpClient.disconnect(); } catch (IOException e) { e.printStackTrace(); } } } return flag; } }
第三步:异常类配置:
package bianliang.com; public class FtpException extends Exception{ private static final long serialVersionUID = 3116679193767247127L; private String message; public FtpException( String message) { this.message=message; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
发表评论
-
jdk1.8切换1.7失效问题
2019-12-24 00:02 420项目需要jdk1.7,高了启动不了。会报错。 然而,我安装j ... -
map集合遍历
2017-09-05 16:10 522public class Test{ pu ... -
JVM调优总结(十)-调优方法
2017-07-30 21:45 0http://pengjiaheng.iteye.com/bl ... -
框架整合目标
2017-07-21 21:35 01, spring+hibernate+struts2+my ... -
java利用jxl.jar生成excel文档
2017-06-28 15:05 371java代码: package com.test.read ... -
利用jxl读取excel文件里面的内容
2017-06-28 14:23 467excel里面的内容: ... -
数组与集合互相转化
2017-04-21 20:20 369package com.ray.util; impo ... -
数组转化为集合
2017-04-16 21:07 848package com.ray.test; im ... -
快速排序
2017-03-31 14:32 375public class QuickSort { publ ... -
归并排序
2017-03-31 14:20 424public class mergeSort { ... -
希尔排序
2017-03-31 13:44 343public class shellSort { ... -
插入排序
2017-03-31 11:55 299插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它 ... -
选择排序
2017-03-31 10:02 450选择排序是一种简单直观的排序算法,数据规模越小越好。唯一的好处 ... -
HTTP协议详解(真的很经典)
2017-03-27 14:14 381[b][b]HTTP是一个属于应用层的面向对象的协议,由于其简 ... -
多线程学习的几篇文章
2017-02-06 17:55 383Java多线程(一)、多线程的基本概念和使用 http:// ... -
java实现可变参数的方法
2017-02-06 17:16 365/** * * * @author Administr ... -
java实现日期的时间的加减
2017-02-06 17:11 1063/** * 时间的加减 * @author Adminis ... -
冒泡排序算法java
2016-12-07 15:22 432今天突然被人问到冒泡排序怎么解决,一时之间自己竟 ... -
java基础之map集合遍历
2016-11-04 16:27 453由于map集合在平时用的时候都是直接get(key)取出单个值 ... -
基于UDP协议的Socket编程
2016-10-23 14:11 1495TCP的可靠保证,是它的 ...
相关推荐
以下将详细介绍如何在Android应用中实现FTP上传功能,并结合提供的资源进行讨论。 首先,我们需要理解FTP的基本原理。FTP是一种网络协议,用于在两台计算机之间传输文件。在Android应用中,我们通常使用Java的FTP...
可以实现文件上传功能,并能检索到FTP目前的目录
Labview FTP上传文件是利用Labview(Laboratory Virtual Instrument Engineering Workbench)这一强大的图形化编程环境,通过FTP(File Transfer Protocol)协议实现文件的远程传输。FTP是一种标准网络协议,用于在...
标题中的“自用通过SSH安全端口代替FTP上传文件功能类似.zip”表明这是一个关于使用SSH(Secure Shell)协议来替代FTP(File Transfer Protocol)进行文件传输的方案。SSH是一种更安全的网络协议,用于在不安全的...
FTP上传文件的核心在于`curl_easy_setopt()`函数,它可以设置各种选项来定制FTP请求。首先,设置URL为FTP服务器的地址: ```cpp curl_easy_setopt(curl, CURLOPT_URL, "ftp://ftp.example.com/path/to/file"); ``` ...
在给定的代码示例中,我们详细探讨了如何使用Java编程语言实现FTP上传文件的功能。 ### 一、FTP上传文件的基本概念 FTP协议由两部分组成:控制连接和数据连接。控制连接用于发送命令和接收响应,而数据连接则用于...
使用`STOR`命令上传文件。首先,设置本地文件路径和FTP服务器上的目标路径,然后发送`STOR`命令: ```vb Dim localFilePath As String = "C:\local\file.txt" Dim remoteFilePath As String = "/public_...
下面是一个简单的FTP连接和上传文件的步骤: 1. **建立FTP连接**:创建一个`FtpWebRequest`对象,设置其`Method`属性为`WebMethod.UploadFile`,并指定FTP服务器的URL、用户名和密码。 ```csharp FtpWebRequest ...
实现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上传完成后,libcurl会触发一个信号,Qt的槽函数可以处理这个信号。这里,我们使用`QNetworkReply`的`finished`信号和一个槽函数: ```cpp // 创建一个槽函数处理FTP上传完成 void uploadFinished...
Spring Boot 中使用 FTP 上传文件到远程服务器的流程 在本文中,我们将介绍如何使用 Spring Boot 实现 FTP 上传文件到远程服务器的流程。这个流程包括如何使用 JWT 登录认证及鉴权的流程,以及如何使用 Spring ...
在IT行业中,定时FTP上传文件是一项常见的自动化任务,尤其对于监控、数据分析或者备份等场景尤为重要。这个任务涉及到几个关键知识点,下面将详细讲解。 首先,我们要理解“定时”这一概念。在计算机领域,定时...
要实现FTP上传,我们首先需要建立一个FTP连接。这可以通过创建一个QNetworkAccessManager实例并调用其get或post方法完成。对于FTP,我们需要使用FTP URL,如“ftp://username:password@server:port/path”。然后,...
标题提到的“3dMax脚本开发的FTP上传文件工具”就是通过Maxscript编写的一个实用工具,它使得3DMax用户能够方便地将工作成果上传到FTP服务器。 FTP(File Transfer Protocol)是一种网络协议,用于在网络上进行文件...
Java作为多平台支持的编程语言,提供了丰富的库和API来实现FTP文件上传功能。本篇文章将详细探讨如何使用Java实现FTP文件上传,以及相关类的作用。 首先,我们来看标题和描述中的关键词"java实现的ftp文件上传",这...
### PHP处理FTP上传文件知识点详解 #### 一、利用PHP内置文件函数实现文件上传 **1.1 上传文件表单设计(upload.html)** 在实现文件上传功能时,首先需要设计一个表单用于接收用户的文件输入。在这个例子中,`...
首先,我们需要理解FTP上传的基本原理。FTP是一种用于在网络上进行文件传输的应用层协议,它允许用户在两台计算机之间交换文件。在PHP中,我们可以使用`ftp_connect()`、`ftp_login()`等函数来建立连接,并通过`ftp_...
以下是一个简单的FTP上传文件的步骤: 1. **创建FtpWebRequest对象**:首先,我们需要创建一个`FtpWebRequest`实例,设置其`Method`属性为`WebRequestMethods.Ftp.UploadFile`,并指定FTP服务器的URL和文件路径。 ...
3. **文件上传**:使用`FTPClient`的`storeFile()`方法上传文件,并在此过程中计算上传速度和进度。首先,打开本地文件: ```java FileInputStream fis = new FileInputStream(localFilePath); ``` 然后,使用`...
在Java编程环境中,FTP(File Transfer Protocol)上传文件并实现进度条显示是一个常见的需求,尤其在用户界面设计中。下面将详细讲解如何使用Java的Swing库创建一个带有进度条的FTP文件上传功能。 首先,我们需要...