-
2018-11-05 10:59:13
文件上传成功 但是内容为空 需要加上 ftpClient.enterLocalPassiveMode();
代码如下:package com.zhuoshi.jcbigdata.spark.jinjingzheng; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPReply; import org.junit.Test; /** * 实现FTP文件上传和文件下载 */ //xml上传ftp public class FtpClient { private static FTPClient ftpClient = new FTPClient(); private static String encoding = System.getProperty("file.encoding");//获取当前文件的格式编码 /** * Description: 向FTP服务器上传文件 * * @Version1.0 * @param url * FTP服务器hostname * @param port * FTP服务器端口 * @param username * FTP登录账号 * @param password * FTP登录密码 * @param path * FTP服务器保存目录,如果是根目录则为“/” * @param filename * 上传到FTP服务器上的文件名 * @param input * 本地文件输入流 * @return 成功返回true,否则返回false */ public static boolean uploadFile(String url, int port, String username, String password, String path, String filename, InputStream input) { boolean result = false; try { int reply; // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器 ftpClient.connect(url); // ftp.connect(url, port);// 连接FTP服务器 // 登录 ftpClient.login(username, password); ftpClient.enterLocalPassiveMode(); ftpClient.setControlEncoding(encoding); // 检验是否连接成功 reply = ftpClient.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { System.out.println("连接失败"); ftpClient.disconnect(); return result; } // 转移工作目录至指定目录下 if(path==null||path.equals("")) { //如果path为空 存在根目录下 path="/"; } boolean change = ftpClient.changeWorkingDirectory(path); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); if (change) { result = ftpClient.storeFile(new String(filename.getBytes("GBK"),"iso-8859-1"), input); if (result) { System.out.println("上传成功!"); } } input.close(); ftpClient.logout(); } catch (IOException e) { e.printStackTrace(); } finally { if (ftpClient.isConnected()) { try { ftpClient.disconnect(); } catch (IOException ioe) { } } } return result; } /** * 将本地文件上传到FTP服务器上 * */ @Test public void testUpLoadFromDisk() { try { FileInputStream in = new FileInputStream(new File("D:/JJZWF/xxx.xml")); boolean flag = uploadFile("url", 21, "passname","password", "/", "xxx.xml", in); System.out.println(flag); } catch (FileNotFoundException e) { e.printStackTrace(); } } }
参考文档
http://www.bubuko.com/infodetail-985948.html
本站系本人编辑转载,转载目的在于传递更多信息,并不代表本人赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本人联系,我将在第一时间删除内容![声明]本站文章版权归原作者所有 内容为作者个人观点 本站只提供参考并不构成任何投资及应用建议。更多相关内容 -
java ftp上传文件
2022-03-23 13:52:26<dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId>...import java.io.IOException;...import java.io.InputStream;...import java...<dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>1.4.1</version> </dependency>
import java.io.IOException; import java.io.InputStream; import java.io.File; import java.io.FileInputStream; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPReply; public class FtpUtils { public static final String hostname = ""; public static final String username = ""; public static final Integer port = 21 ; public static final String password = ""; public FTPClient ftpClient = null; public static void main(String[] args) { FtpUtils ftp =new FtpUtils(); ftp.uploadFile("/20190632/", "1.mp4","/Users/jinx/Downloads/0001180614000233_20190621074125_inCarVideo.mp4"); } /** * 上传文件 * @param pathname ftp服务保存地址文件夹路径 * @param fileName 上传到ftp的文件名 * @param originfilename 待上传文件的名称(绝对地址) * * @return */ @SuppressWarnings("static-access") public void uploadFile( String pathname, String fileName,String originfilename){ InputStream inputStream = null; FTPClient ftp = new FTPClient(); ftp.setDefaultTimeout(600*1000); ftp.setDataTimeout(600*1000); ftp.setControlEncoding("utf-8"); try{ inputStream = new FileInputStream(new File(originfilename)); ftp.connect(hostname, port); //连接ftp服务器 ftp.login(username, password); //登录ftp服务器 ftp.enterLocalPassiveMode(); int replyCode = ftp.getReplyCode(); //是否成功登录服务器 if(!FTPReply.isPositiveCompletion(replyCode)){ //链接失败 } ftp.setFileType(ftpClient.BINARY_FILE_TYPE); CreateDirecroty(ftp,pathname); ftp.makeDirectory(pathname); ftp.changeWorkingDirectory(pathname); ftp.storeFile(fileName, inputStream); inputStream.close(); ftp.logout(); ftp.disconnect(); inputStream.close(); }catch (Exception e) { e.printStackTrace(); } } /** * 改变目录路径 * @param directory * @return */ public boolean changeWorkingDirectory(FTPClient ftp, String directory) { boolean flag = true; try { flag = ftp.changeWorkingDirectory(directory); } catch (IOException ioe) { ioe.printStackTrace(); } return flag; } /** * 创建多层目录文件,如果有ftp服务器已存在该文件,则不创建,如果无,则创建 * @param ftp * @param remote * @return * @throws IOException */ public boolean CreateDirecroty(FTPClient ftp,String remote) throws IOException { boolean success = true; String directory = remote + "/"; // 如果远程目录不存在,则递归创建远程服务器目录 if (!directory.equalsIgnoreCase("/") && !changeWorkingDirectory(ftp,new String(directory))) { int start = 0; int end = 0; if (directory.startsWith("/")) { start = 1; } else { start = 0; } end = directory.indexOf("/", start); String path = ""; String paths = ""; while (true) { String subDirectory = new String(remote.substring(start, end).getBytes("GBK"), "iso-8859-1"); path = path + "/" + subDirectory; if (!existFile(ftp,path)) { if (makeDirectory(ftp,subDirectory)) { changeWorkingDirectory(ftp,subDirectory); } else { changeWorkingDirectory(ftp,subDirectory); } } else { changeWorkingDirectory(ftp,subDirectory); } paths = paths + "/" + subDirectory; start = end + 1; end = directory.indexOf("/", start); // 检查所有目录是否创建完毕 if (end <= start) { break; } } } return success; } /** * 判断ftp服务器文件是否存在 * @param ftp * @param path * @return * @throws IOException */ public boolean existFile(FTPClient ftp, String path) throws IOException { boolean flag = false; FTPFile[] ftpFileArr = ftp.listFiles(path); if (ftpFileArr.length > 0) { flag = true; } return flag; } /** * 创建目录 * @param ftp * @param dir * @return */ public boolean makeDirectory(FTPClient ftp,String dir) { boolean flag = true; try { flag = ftp.makeDirectory(dir); } catch (Exception e) { e.printStackTrace(); } return flag; } }
-
javaftp上传文件.txt
2017-11-29 17:10:32javaftp上传文件.txt javaftp上传文件.txt javaftp上传文件.txt -
Java ftp上传文件方法效率对比
2021-03-03 13:17:58Java ftp上传文件方法效率对比一、功能简介:txt文件采用ftp方式从windows传输到Linux系统;二、ftp实现方法(1)方法一:采用二进制流传输,设置缓冲区,速度快,50M的txt文件需要15秒;//FTP传输到数据库服务器...Java ftp上传文件方法效率对比
一、功能简介:
txt文件采用ftp方式从windows传输到Linux系统;
二、ftp实现方法
(1)方法一:采用二进制流传输,设置缓冲区,速度快,50M的txt文件需要15秒;
//FTP传输到数据库服务器
public boolean uploadServerByFtp(String fileNmae){
boolean flag = true;
//客户端数据文件路径
String client_path = "D://answer/data/";
//服务器上的存放数据文件路径
String server_path = "/home/download/file_tmp/";
String hostname = "192.25.125.112";
String ftpusername = "root";
String ftppwd = “123456”;
int port = 21;//查找路径下的指定txt文件,然后采用FTP上传
File file_name = new File(client_path+fileNmae);
if(!file_name.exists()){
return false;
}
//创建ftp客户端
FTPClient ftpClient = new FTPClient();
ftpClient.setControlEncoding("utf-8");
//主动模式
ftpClient.enterLocalActiveMode();
String getfileName = file_name.getName();
String getfileNamePath = file_name.getPath();
if((getfileName.substring(getfileName.lastIndexOf(".")).trim().equals(".txt"))){
try {
//链接ftp服务器
ftpClient.connect(hostname, port);
//登录ftp
ftpClient.login(ftpusername, ftppwd);
int reply = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftpClient.disconnect();
logger.info("Returns a 530 password username error or the current user does not have permission to close the FTP connection");
return false;
}
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
String server_file_name = server_path+ getfileName;
InputStream input = new FileInputStream(getfileNamePath);
OutputStream out = ftpClient.storeFileStream(server_file_name);
byte[] byteArray = new byte[4096];
int read = 0;
while ((read = input.read(byteArray)) != -1) {
out.write(byteArray, 0, read);
}
out.close();
ftpClient.logout();
} catch (SocketException e) {
flag = false;
e.printStackTrace();
} catch (IOException e) {
flag = false;
e.printStackTrace();
} catch (Exception e) {
flag = false;
e.printStackTrace();
}finally {
if (ftpClient.isConnected()) {
try {
ftpClient.disconnect();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
}
return flag;
}
(2)方法二:storeFile()方法,没有设置缓冲区,速度慢,50M的txt文件需要100秒;
//FTP传输到数据库服务器
public boolean uploadServerByFtp(String fileNmae){
boolean flag = true;
//客户端数据文件路径
String client_path = "D://answer/data/";
//服务器上的存放数据文件路径
String server_path = "/home/download/file_tmp/";
String hostname = "192.25.125.112";
String ftpusername = "root";
String ftppwd = “123456”;
int port = 21;
//查找路径下的指定txt文件,然后采用FTP上传
File file_name = new File(client_path+fileNmae);
if(!file_name.exists()){
return false;
}
//创建ftp客户端
FTPClient ftpClient = new FTPClient();
ftpClient.setControlEncoding("utf-8");
String getfileName = file_name.getName();
String getfileNamePath = file_name.getPath();
if((getfileName.substring(getfileName.lastIndexOf(".")).trim().equals(".txt"))){
try {
//链接ftp服务器
ftpClient.connect(hostname, port);
//登录ftp
ftpClient.login(ftpusername, ftppwd);
int reply = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftpClient.disconnect();
logger.info("Returns a 530 password username error or the current user does not have permission to close the FTP connection");
return false;
}
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
String server_file_name = server_path+ getfileName;
//读取源文件流(客户端文件)
InputStream client_fileInput = new FileInputStream(getfileNamePath);
//传送到服务端
ftpClient.storeFile(server_file_name, client_fileInput);
client_fileInput.close();
ftpClient.logout();
} catch (SocketException e) {
flag = false;
e.printStackTrace();
} catch (IOException e) {
flag = false;
e.printStackTrace();
} catch (Exception e) {
flag = false;
e.printStackTrace();
}finally {
if (ftpClient.isConnected()) {
try {
ftpClient.disconnect();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
}
return flag;
}
Java ftp 上传文件和下载文件
今天同事问我一个ftp 上传文件和下载文件功能应该怎么做,当时有点懵逼,毕竟我也是第一次,然后装了个逼,在网上找了一段代码发给同事,叫他调试一下.结果悲剧了,运行不通过.(装逼失败) 我找的文章链接: ...
.net ftp上传文件方法
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI ...
java ftp上传文件
/** * 上传文件到ftp * @param server * @param user * @param pwd * @param filenames */ public static void u ...
java ftp上传文件 工具类
package com.learning.spboot.utils; import com.jcraft.jsch.*; import org.apache.commons.net.ftp.FTPCl ...
再看ftp上传文件
前言 去年在项目中用到ftp上传文件,用FtpWebRequest和FtpWebResponse封装一个帮助类,这个在网上能找到很多,前台使用Uploadify控件,然后在服务器上搭建Ftp服务器,在 ...
FTP 上传文件
有时候需要通过FTP同步数据文件,除了比较稳定的IDE之外,我们程序员还可以根据实际的业务需求来开发具体的工具,具体的开发过程就不细说了,这里了解一下通过C#实现FTP上传文件到指定的地址. /// ...
Ftp上传文件
package net.util.common; import java.io.File; import java.io.FileInputStream; import java.io.FileOut ...
C# FTP上传文件时出现";应 PASV 命令的请求,服务器返回了一个与 FTP 连接地址不同的地址。";的错误
FTP上传文件时出现"应 PASV 命令的请求,服务器返回了一个与 FTP 连接地址不同的地址."的错误 解决方法是在原代码上增加这句话 reqFTP.UsePassive = f ...
PHP使用FTP上传文件到服务器(实战篇)
我们在做开发的过程中,上传文件肯定是避免不了的,平常我们的程序和上传的文件都在一个服务器上,我们也可以使用第三方sdk上传文件,但是文件在第三方服务器上.现在我们使用PHP的ftp功能把文件上传到我们 ...
随机推荐
HDU 4757 Tree 可持久化字典树
Tree Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4757 Des ...
java开发webservice
第一部分:相关下载配置 1.开发环境 eclipse-jee-mars-2-win32-x86_64.zip http://www.eclipse.org/downloads/index-pac ...
[置顶] PHP开发实战权威指南-读书总结
从今年开始,断断续续学习PHP已经有4个月了. 最初,认真学习PHP几天,就弄WordPress搭建了一个个人博客,这也符合技术人的实践理念. 最近,重温PHP开发实战权威指南,做点总结,整理下自己学 ...
Java Web开发: Tomcat中部署项目的三种方法
web开发,在tomcat中部署项目的方法: 可以参考http://m.blog.csdn.net/blog/u012516903/15741727 定义$CATALINA_HOME指的是Tomcat ...
MongoDB添加secondary节点的两种方法
前段时间维护的一个事业群的其中一条业务线的开发找到运维,提出来了一个MongoDB的优化问题,那段时间MongoDB正在从op管理移交给db进行维护,整个部门都对MongoDB的运维经验缺乏,Mong ...
开放标准-http://www.open-std.org/
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/qianguozheng/article/details/37654877 http://www.op ...
Java继承(下)
Object类 在www.oracle中找到java 中的java.lang在中找到object类中找到可以看到在java语言中的定义 如何修改object中的equals类及测试 在object中类 ...
Spring RestTemplate 中文乱码问题
1.原因 由于RestTemplate的默认构造方法初始化的StringHttpMessageConverter的默认字符集是ISO-8859-1,所以导致RestTemplate请求的响应内容会出现 ...
Android的GridView控件点击图片变暗效果
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setC ...
使用 vux 框架
1)vux官网:https://vux.li/#/ 2)通过 vue-cli 工具使用 vux 1.如果没有安装 nodejs,请先前往 nodejs 官网下载并安装 nodejs,传送门:https ...
-
java ftp上传 下载 文件压缩解压
2019-07-30 01:17:09NULL 博文链接:https://liugaojian13135.iteye.com/blog/837708 -
Java实现FTP文件的上传和下载功能的实例代码
2020-09-01 03:37:42FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。接下来通过本文给大家实例讲解Java实现FTP文件的上传和下载功能,需要的的朋友一起看看吧 -
java实现的ftp文件上传
2016-03-16 11:39:46java实现的ftp文件上传 -
java FTP上传文件,成功上传,但是文件为空????
2017-12-22 01:16:09我再linux上面装了一个ftp,准备用程序上传文件到ftp 文件服务器上面, 上传是成功了,但是上传后的文件为空??我调试了发现storeFile这个方法一直返回false ![图片说明]... -
Java Ftp上传文件,Ftp工具类
2018-06-24 19:42:28这里已经忘了参考的哪位博友的文章,如果有哪位小伙伴看到,请留言Ftp工具类package com.ldl.test.util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io....这里已经忘了参考的哪位博友的文章,如果有哪位小伙伴看到,请留言
Ftp工具类
package com.ldl.test.util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.SocketException; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.List; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPReply; /** * FTPClient工具类 * @author ldl */ public class FtpUtil { //private static Logger log = Logger.getLogger(FtpUtil.class); private FTPClient ftp; public FtpUtil() { ftp = new FTPClient(); ftp.setControlEncoding("UTF-8"); //解决上传文件时文件名乱码 } public FtpUtil(String controlEncoding) { ftp = new FTPClient(); ftp.setControlEncoding(controlEncoding); //解决上传文件时文件名乱码 } public void setTimeOut(int defaultTimeoutSecond, int connectTimeoutSecond, int dataTimeoutSecond){ try { ftp.setDefaultTimeout(defaultTimeoutSecond * 1000); //ftp.setConnectTimeout(connectTimeoutSecond * 1000); //commons-net-3.5.jar ftp.setSoTimeout(connectTimeoutSecond * 1000); //commons-net-1.4.1.jar 连接后才能设置 ftp.setDataTimeout(dataTimeoutSecond * 1000); } catch (SocketException e) { System.out.println("setTimeout Exception:"+e); } } public FTPClient getFTPClient(){ return ftp; } public void setControlEncoding(String charset){ ftp.setControlEncoding(charset); } public void setFileType(int fileType) throws IOException { ftp.setFileType(fileType); } /** * Connect to FTP server. * * @param host * FTP server address or name * @param port * FTP server port * @param user * user name * @param password * user password * @throws IOException * on I/O errors */ public FTPClient connect(String host, int port, String user, String password) throws IOException { // Connect to server. try { ftp.connect(host, port); } catch (UnknownHostException ex) { throw new IOException("Can't find FTP server '" + host + "'"); } // Check rsponse after connection attempt. int reply = ftp.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { disconnect(); throw new IOException("Can't connect to server '" + host + "'"); } if ("".equals(user)) { user = "qiangdiao_ftp"; } // Login. if (!ftp.login(user, password)) { disconnect(); throw new IOException("Can't login to server '" + host + "'"); } // Set data transfer mode. ftp.setFileType(FTP.BINARY_FILE_TYPE); //ftp.setFileType(FTP.ASCII_FILE_TYPE); /* 注: ftp上传到服务器分主动模式和被动模式,网ip上传主动模式:ftp.enterLocalActiveMode();(默认) 内网ip上传被动模式:ftp.enterLocalPassiveMode();*/ // Use passive mode to pass firewalls. //ftp.enterLocalPassiveMode(); return ftp; } /** * Test connection to ftp server * * @return true, if connected */ public boolean isConnected() { return ftp.isConnected(); } /** * Disconnect from the FTP server * * @throws IOException * on I/O errors */ public void disconnect() throws IOException { if (ftp.isConnected()) { try { ftp.logout(); ftp.disconnect(); } catch (IOException ex) { } } } /** * Get file from ftp server into given output stream * * @param ftpFileName * file name on ftp server * @param out * OutputStream * @throws IOException */ public void retrieveFile(String ftpFileName, OutputStream out) throws IOException { try { // Get file info. FTPFile[] fileInfoArray = ftp.listFiles(ftpFileName); if (fileInfoArray == null || fileInfoArray.length == 0) { throw new FileNotFoundException("File '" + ftpFileName + "' was not found on FTP server."); } // Check file size. FTPFile fileInfo = fileInfoArray[0]; long size = fileInfo.getSize(); if (size > Integer.MAX_VALUE) { throw new IOException("File '" + ftpFileName + "' is too large."); } // Download file. if (!ftp.retrieveFile(ftpFileName, out)) { throw new IOException("Error loading file '" + ftpFileName + "' from FTP server. Check FTP permissions and path."); } out.flush(); } finally { if (out != null) { try { out.close(); } catch (IOException ex) { } } } } /** * Put file on ftp server from given input stream * * @param ftpFileName * file name on ftp server * @param in * InputStream * @throws IOException */ public void storeFile(String ftpFileName, InputStream in) throws IOException { try { if (!ftp.storeFile(ftpFileName, in)) { throw new IOException("Can't upload file '" + ftpFileName + "' to FTP server. Check FTP permissions and path."); } } finally { try { in.close(); } catch (IOException ex) { } } } /** * 修改名称 * @param from * @param to * @throws IOException */ public boolean rename(String from, String to) throws IOException { return ftp.rename(from, to); } /** * Delete the file from the FTP server. * * @param ftpFileName * server file name (with absolute path) * @throws IOException * on I/O errors */ public void deleteFile(String ftpFileName) throws IOException { if (!ftp.deleteFile(ftpFileName)) { throw new IOException("Can't remove file '" + ftpFileName + "' from FTP server."); } } /** * Upload the file to the FTP server. * * @param ftpFileName * server file name (with absolute path) * @param localFile * local file to upload * @throws IOException * on I/O errors */ public void upload(String ftpFileName, File localFile) throws IOException { // File check. if (!localFile.exists()) { throw new IOException("Can't upload '" + localFile.getAbsolutePath() + "'. This file doesn't exist."); } // Upload. InputStream in = null; try { in = new BufferedInputStream(new FileInputStream(localFile)); if (!ftp.storeFile(ftpFileName, in)) { throw new IOException("Can't upload file '" + ftpFileName + "' to FTP server. Check FTP permissions and path."); } } finally { try { in.close(); } catch (IOException ex) { ex.printStackTrace(); } } } /** * 上传目录(会覆盖) * @param remotePath 远程目录 /home/test/a * @param localPath 本地目录 D:/test/a * @throws IOException */ public void uploadDir(String remotePath, String localPath) throws IOException { File file = new File(localPath); if (file.exists()) { if(!ftp.changeWorkingDirectory(remotePath)){ ftp.makeDirectory(remotePath); //创建成功返回true,失败(已存在)返回false ftp.changeWorkingDirectory(remotePath); //切换成返回true,失败(不存在)返回false } File[] files = file.listFiles(); for (File f : files) { if (f.isDirectory() && !f.getName().equals(".") && !f.getName().equals("..")) { uploadDir(remotePath + File.separator + f.getName(), f.getPath()); } else if (f.isFile()) { upload(remotePath + File.separator + f.getName(), f); } } } } /** * Download the file from the FTP server. * * @param ftpFileName * server file name (with absolute path) * @param localFile * local file to download into * @throws IOException * on I/O errors */ public void download(String ftpFileName, File localFile) throws IOException { // Download. OutputStream out = null; try { // Get file info. FTPFile[] fileInfoArray = ftp.listFiles(ftpFileName); if (fileInfoArray == null || fileInfoArray.length == 0) { throw new FileNotFoundException("File " + ftpFileName + " was not found on FTP server."); } // Check file size. FTPFile fileInfo = fileInfoArray[0]; long size = fileInfo.getSize(); if (size > Integer.MAX_VALUE) { throw new IOException("File " + ftpFileName + " is too large."); } // Download file. out = new BufferedOutputStream(new FileOutputStream(localFile)); if (!ftp.retrieveFile(ftpFileName, out)) { throw new IOException("Error loading file " + ftpFileName + " from FTP server. Check FTP permissions and path."); } out.flush(); } finally { if (out != null) { try { out.close(); } catch (IOException ex) { } } } } /** * 下载目录(会覆盖) * @param remotePath 远程目录 /home/test/a * @param localPath 本地目录 D:/test/a * @return * @throws IOException */ public void downloadDir(String remotePath, String localPath) throws IOException { File file = new File(localPath); if(!file.exists()){ file.mkdirs(); } FTPFile[] ftpFiles = ftp.listFiles(remotePath); for (int i = 0; ftpFiles!=null && i<ftpFiles.length; i++) { FTPFile ftpFile = ftpFiles[i]; if (ftpFile.isDirectory() && !ftpFile.getName().equals(".") && !ftpFile.getName().equals("..")) { downloadDir(remotePath + File.separator + ftpFile.getName(), localPath + File.separator + ftpFile.getName()); } else { download(remotePath + File.separator + ftpFile.getName(), new File(localPath + File.separator + ftpFile.getName())); } } } /** * List the file name in the given FTP directory. * * @param filePath * absolute path on the server * @return files relative names list * @throws IOException * on I/O errors */ public List<String> listFileNames(String filePath) throws IOException { List<String> fileList = new ArrayList<String>(); FTPFile[] ftpFiles = ftp.listFiles(filePath); for (int i = 0; ftpFiles!=null && i<ftpFiles.length; i++) { FTPFile ftpFile = ftpFiles[i]; if (ftpFile.isFile()) { fileList.add(ftpFile.getName()); } } return fileList; } /** * List the files in the given FTP directory. * * @param filePath * directory * @return list * @throws IOException */ public List<FTPFile> listFiles(String filePath) throws IOException { List<FTPFile> fileList = new ArrayList<FTPFile>(); FTPFile[] ftpFiles = ftp.listFiles(filePath); for (int i = 0; ftpFiles!=null && i<ftpFiles.length; i++) { FTPFile ftpFile = ftpFiles[i]; // FfpFileInfo fi = new FfpFileInfo(); // fi.setName(ftpFile.getName()); // fi.setSize(ftpFile.getSize()); // fi.setTimestamp(ftpFile.getTimestamp()); // fi.setType(ftpFile.isDirectory()); fileList.add(ftpFile); } return fileList; } /** * Send an FTP Server site specific command * * @param args * site command arguments * @throws IOException * on I/O errors */ public void sendSiteCommand(String args) throws IOException { if (ftp.isConnected()) { try { ftp.sendSiteCommand(args); } catch (IOException ex) { } } } /** * Get current directory on ftp server * * @return current directory */ public String printWorkingDirectory() { if (!ftp.isConnected()) { return ""; } try { return ftp.printWorkingDirectory(); } catch (IOException e) { } return ""; } /** * Set working directory on ftp server * * @param dir * new working directory * @return true, if working directory changed */ public boolean changeWorkingDirectory(String dir) { if (!ftp.isConnected()) { return false; } try { return ftp.changeWorkingDirectory(dir); } catch (IOException e) { } return false; } /** * Change working directory on ftp server to parent directory * * @return true, if working directory changed */ public boolean changeToParentDirectory() { if (!ftp.isConnected()) { return false; } try { return ftp.changeToParentDirectory(); } catch (IOException e) { } return false; } /** * Get parent directory name on ftp server * * @return parent directory */ public String printParentDirectory() { if (!ftp.isConnected()) { return ""; } String w = printWorkingDirectory(); changeToParentDirectory(); String p = printWorkingDirectory(); changeWorkingDirectory(w); return p; } /** * 创建目录 * @param pathname * @throws IOException */ public boolean makeDirectory(String pathname) throws IOException { return ftp.makeDirectory(pathname); } /** * 查询ftp服务器上指定路径所有文件名 * * @param url * FTP服务器hostname * @param port * FTP服务器端口 * @param username * FTP登录账号 * @param password * FTP登录密码 * @param remotePath * FTP服务器上的相对路径 * @return */ public static List<String> listFTPFiles(String url, int port, String username, String password, String remotePath) { ArrayList<String> resultList = new ArrayList<String>(); FTPClient ftp = new FTPClient(); try { int reply; ftp.connect(url, port); // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器 ftp.login(username, password);// 登录 ftp.setFileType(FTPClient.BINARY_FILE_TYPE); reply = ftp.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { ftp.disconnect(); return resultList; } ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录 FTPFile[] fs = ftp.listFiles(); for (FTPFile ff : fs) { resultList.add(ff.getName()); // if (ff.getName().equals(fileName)) { // File localFile = new File(localPath + "/" + ff.getName()); // OutputStream is = new FileOutputStream(localFile); // ftp.retrieveFile(ff.getName(), is); // is.close(); // } } ftp.logout(); } catch (IOException e) { e.printStackTrace(); } finally { if (ftp.isConnected()) { try { ftp.disconnect(); } catch (IOException ioe) { } } } return resultList; } /** * 创建多层目录文件,如果有ftp服务器已存在该文件,则不创建,如果无,则创建 * @param url * @param port * @param username * @param password * @param remote * @return * @throws IOException */ public static boolean createDirectory(String url, int port, String username, String password, String remote) throws IOException { FTPClient ftp = new FTPClient(); int reply; ftp.connect(url, port); // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器 ftp.login(username, password);// 登录 ftp.setFileType(FTPClient.BINARY_FILE_TYPE); reply = ftp.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { ftp.disconnect(); } //ftp.changeWorkingDirectory("/var/www/html");// 转移到FTP服务器目录 boolean success = true; String directory = remote + "/"; // String directory = remote.substring(0, remote.lastIndexOf("/") + 1); // 如果远程目录不存在,则递归创建远程服务器目录 if (!directory.equalsIgnoreCase("/") && !changeWorkingDirectory(new String(directory), ftp)) { int start = 0; int end = 0; if (directory.startsWith("/")) { start = 1; } else { start = 0; } end = directory.indexOf("/", start); String path = ""; String paths = ""; while (true) { String subDirectory = new String(remote.substring(start, end).getBytes("GBK"), "iso-8859-1"); path = path + "/" + subDirectory; if (!existFile(path, ftp)) { if (makeDirectory(subDirectory, ftp)) { changeWorkingDirectory(subDirectory, ftp); } else { System.out.println("创建目录[" + subDirectory + "]失败"); changeWorkingDirectory(subDirectory, ftp); } } else { changeWorkingDirectory(subDirectory, ftp); } paths = paths + "/" + subDirectory; start = end + 1; end = directory.indexOf("/", start); // 检查所有目录是否创建完毕 if (end <= start) { break; } } } return success; } /** * 改变目录路径 * @param directory * @param ftp * @return */ public static boolean changeWorkingDirectory(String directory, FTPClient ftp) { boolean flag = true; try { flag = ftp.changeWorkingDirectory(directory); if (flag) { System.out.println("进入文件夹" + directory + " 成功!"); } else { System.out.println("进入文件夹" + directory + " 失败!"); } } catch (IOException ioe) { ioe.printStackTrace(); } return flag; } /** * 创建目录 * @param dir * @param ftp * @return */ public static boolean makeDirectory(String dir, FTPClient ftp) { boolean flag = true; try { flag = ftp.makeDirectory(dir); if (flag) { System.out.println("创建文件夹" + dir + " 成功!"); } else { System.out.println("创建文件夹" + dir + " 失败!"); } } catch (Exception e) { e.printStackTrace(); } return flag; } /** * 判断ftp服务器文件是否存在 * @param path * @param ftp * @return * @throws IOException */ public static boolean existFile(String path, FTPClient ftp) throws IOException { boolean flag = false; FTPFile[] ftpFileArr = ftp.listFiles(path); if (ftpFileArr.length > 0) { flag = true; } return flag; } }
测试类
package com.ldl.test.controller; import java.io.File; import java.io.IOException; import com.ldl.test.util.FtpUtil; public class FtpController { public static void main(String[] args) { FtpUtil ftpUtil = new FtpUtil("UTF-8"); try { ftpUtil.connect("", 21, "qiangdiao_ftp", "qiangdiao_ftp_test"); //0871/yidong/action_YYYYMMDD //ftpUtil.setTimeOut(60, 60, 60); /*ftpUtil.upload("/home/testuser/文件1.txt", new File("E:/image/FTPClient/FTPClient测试/文件1.txt")); ftpUtil.download("/home/testuser/文件1.txt", new File("E:/image/FTPClient/FTPClient测试/文件1.txt")); ftpUtil.uploadDir("/home/testuser/FTPClient测试", "E:/image/FTPClient/FTPClient测试"); ftpUtil.downloadDir("/home/testuser/FTPClient测试", "E:/image/FTPClient/FTPClient测试"); */ //把远程文件读入到流中 /*ByteArrayOutputStream bos = new ByteArrayOutputStream(); //自动增长 ftpUtil.retrieveFile("/home/testuser/文件1.txt", bos); System.out.println(bos.size()); String contentStr = new String(bos.toByteArray(),"GBK"); System.out.println(contentStr);*/ //打印父目录 //System.out.println(ftpUtil.printParentDirectory()); //打印工作目录 //System.out.println(ftpUtil.printWorkingDirectory()); //在工作目录下创建目录 注:只能一级一级创建,并要切换目录后才能创建下级目录 /*String newDirectory = "0871"; ftpUtil.makeDirectory(newDirectory); ftpUtil.changeWorkingDirectory("0871"); System.out.println(ftpUtil.printWorkingDirectory()); ftpUtil.makeDirectory("yidong");*/ /*ftpUtil.changeWorkingDirectory("0871/yidong");//注:切换目录时,不能用文件File.separator,直接用 '/',不然会失败 System.out.println(ftpUtil.printWorkingDirectory());*/ //封装创建多层目录 //System.out.println(ftpUtil.createDirectory("", 21, "qiangdiao_ftp", "qiangdiao_ftp_test", "mutiple/test/haha")); /*System.out.println("------上传开始---------"); //切换目录 //ftpUtil.changeWorkingDirectory("/home/ftp/qiangdiao/0871/yidong"); ftpUtil.upload("/home/ftp/qiangdiao/0871/yidong/action_201806175.zip", new File(System.getProperty("user.dir")+File.separator+"upload"+File.separator+"action_201806175.zip")); System.out.println("-------上传结束----------");*/ //如果没有切换工作目录就要写绝对目录 //ftpUtil.download("/home/ftp/qiangdiao/0871/yidong/action_201806175.zip", new File(System.getProperty("user.dir")+File.separator+"upload"+File.separator+"ftp_download.zip")); ftpUtil.disconnect(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
特别注意
/* 注: ftp上传到服务器分主动模式和被动模式,网ip上传主动模式:ftp.enterLocalActiveMode();(默认) 内网ip上传被动模式:ftp.enterLocalPassiveMode();*/ // Use passive mode to pass firewalls. //ftp.enterLocalPassiveMode();
我当时就设置的本地模式,上传文件时会一直报连接超时这个错,如下图
ftp.enterLocalPassiveMode();
项目源码GitHub: https://github.com/MrLiam/FtpDemo
-
java FTP服务器文件上传下载,创建多级文件夹.zip
2020-12-15 15:27:19java FTP服务器文件上传下载,查找文件目录,不存在则添加,创建多级文件夹,java ,demo 直接使用,内有jar包 -
java ftp上传进行文件
2018-07-16 15:52:30java ftp上传进行文件的读取和上传 上传单个文件的文件流 创建远程服务器目录 删除指定文件 上传单个文件 获取指定ftp目录下文件名 -
java FTP上传文件,下载文件
2019-08-04 01:20:46NULL 博文链接:https://cqh520llr.iteye.com/blog/2019571 -
java上传文件至FTP服务器
2014-10-14 10:47:44Apache commons-net 上传文件至FTP服务器 -
java实现ftp上传文件到服务器
2021-08-08 06:54:14java实现ftp上传文件到服务器 内容精选换一换怎样上传文件到Windows操作系统云服务器?安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器。例如QQ.exe。在本地主机和Windows云... -
Java实现ftp文件上传下载解决慢中文乱码多个文件下载等问题
2020-09-01 10:09:13主要介绍了Java实现ftp文件上传下载解决慢中文乱码多个文件下载等问题的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下 -
Java实现ftp上传文件、文件夹
2021-02-27 20:16:47import java.io.File;import java.io.FileInputStream;import org.apache.commons.net.ftp.FTPClient;import org.apache.commons.net.ftp.FTPReply;public class test {private FTPClient .../**** @param path 上传... -
java编写的ftp文件实时监控下载上传
2016-03-22 17:06:13用java语言编写的ftp小工具,可以按指定时间监控ftp服务器,把服务器指定目录内新产生的文件或者文件夹下载到本地指定文件夹,下载后删除数据。 也可以监控本地文件夹,把文件夹内新产生的文件或者文件夹整体上传到... -
JAVA操作FTP文件服务器上传与下载文件
2018-07-17 15:54:24JAVA操作FTP文件服务器上传与下载文件,包含远程动态创建文件夹、查看文件是否存在、删除文件、上传文件和下载文件等方法 -
java使用ftp上传文件示例分享
2020-09-04 15:43:28主要介绍了java使用ftp上传文件示例,需要的朋友可以参考下 -
FTPUpload上传文件 进度条显示进度
2015-06-12 10:58:46java FTP上传文件(进度条显示进度) -
java实现ftp上传 如何创建文件夹
2020-08-30 17:34:59主要为大家详细介绍了java实现ftp上传的相关资料,教大家如何创建文件夹?具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
Java项目实现文件上传FTP
2021-07-21 15:08:45目录一、介绍二、pom依赖及配置文件三、Controller控制层接收文件四、Service业务层五、上传测试 一、介绍 街道一个需求,需要提供一个接口,将资质文件...-- ftp上传下载--> <dependency> <groupId& -
java通过上传文件至ftp服务器
2021-11-22 20:00:23ftp工具类 import org.apache.commons.lang.StringUtils; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPClientConfig; import org.apache.commons.net.ftp.FTPFile; ... -
java FTP上传文件(进度条显示进度)
2015-06-12 11:00:40java实现FTP上传有2种方式,一种是org.apache.commons.net.ftp.FTPClient这个jar包,一种是sun.net.ftp.FtpClient。不知道为什么,在使用前一种方式时,在遇到大批量的上传文件时总会抛出异常,我却找不出原因,所以... -
java ftp上传时,代码不报错,也上传不过去文件
2021-04-22 01:50:43今天测试上传文件到 ftp 服务器时,上传不过去。其中遇到了假死问题,已经解决了。解决以后,就发现在这行代码,一直返回 false 。flag = ftpClient.storeFile(new String(remote.getBytes("UTF-8"),"iso-8859-1"), ... -
java使用ftp上传文件
2019-03-26 09:17:08之前上传文件只能在服务器创建文件,但是大小始终是0。搜了以后发现是ftp的被动模式 所以修改代码 package com.cn.test; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient;... -
java ftp上传失败怎么办
2021-02-27 11:55:08java ftp上传失败怎么办?最近做一个项目需要将文件上传至FTP指定目录,然后发现项目部署在tomcat就可以成功,部署在weblogic就失败,在网上找了很多原因一直没有解决。boolean isSuccee = ftp.storeFile(fileName, ... -
JAVA技术实现上传下载文件到FTP服务器(完整)
2020-09-03 12:08:38主要介绍了JAVA技术实现上传下载文件到FTP服务器(完整),本文使用 Apache Jakarta Commons Net(commons-net-3.3.jar) 基于FileZilla Server服务器实现FTP服务器上文件的上传/下载/删除等操作,需要的朋友可以参考下 -
有关java的ftp上传文件时断网的问题
2021-03-22 11:14:22该楼层疑似违规已被系统折叠隐藏此楼查看此楼我有一个java的ftp程序,他既是客户端又是服务端,我把程序放在两台电脑上运行,computer1和computer2,在computer1为文件上传端,computer2为文件的接收端,在computer1...