FTP文件上传和下载(JAVA)
前文
1、使用FTP的方式进行文件的上传和下载(非SFTP)
2、本人手打,亲测,代码是最简单的,清晰易懂,需要的同学请结合自己的实际添加业务逻辑
2、第三方的jar包:import org.apache.commons.net.ftp.FTPClient;
代码
package Main; import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Writer;
import java.util.List; 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; import Domain.FileInfoList;
import Domain.FtpConfig;
import Util.LoggerUtil; public class FTPUtils {
public static final String ftp_IP = "192.168.0.6";
public static final Integer ftp_port = 9001;
public static final String ftp_user = "Administrator";
public static final String ftp_psw = "123"; public static void main(String args[]) {
//download from FTP
downloadFromFTP(ftp_IP,ftp_port,ftp_user,ftp_psw,"/","新建文本文档.txt","E:");
//upload from FTP
uploadFromFTP(ftp_IP,ftp_port,ftp_user,ftp_psw,"/","E://新建文本文档.txt","新建文本文档.txt");
}
/**
* @param url IP
* @param port 端口
* @param username 用户名
* @param password 密码
* @param remotePath 服务器上的路径
* @param fileName 要下载的文件
* @param localPath 保存到本地的文件
*/
public static boolean downloadFromFTP(String url, int port, String username, String password, String remotePath,
String fileName, String localPath) {
boolean success = false;
FTPClient ftp = new FTPClient();
InputStream input=null;
BufferedOutputStream writer=null;
byte[] by=null;
try {
int reply;
ftp.connect(url, port);
// ftp.connect(url);
// 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
ftp.login(username, password);// 登录
ftp.enterLocalPassiveMode();
ftp.setControlEncoding("gbk");
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return success;
}
ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录
FTPFile[] fs = ftp.listFiles(); // 获取当前目录下的所有文件 for (FTPFile ff : fs) {
if (new String(ff.getName().getBytes(),"utf-8").equals(fileName)) {
//防止出现中文文件名是返回null,强制设置成ISO-8859-1的编码方式进行获取输入流
input=ftp.retrieveFileStream("/"+(new String(ff.getName().getBytes("gbk"), "ISO-8859-1")));
by=new byte[(int)ff.getSize()];
//把文件流保存到byte数组中
input.read(by);
//文件输出到目标目录,不需要判断本地目录是否有相同文件,会自动覆盖
writer=new BufferedOutputStream(new FileOutputStream(localPath+"/"+fileName));
writer.write(by);
System.out.println("输出指定文件【"+fileName+"】到本地目录:"+localPath+"/"+fileName+"成功");
}
}
//断开FTP连接
ftp.logout();
success = true;
} catch (IOException e) {
e.printStackTrace();
} finally { if (ftp.isConnected()) {
try {
if(writer!=null) {
writer.close();
}
if(input!=null) {
input.close();
}
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
return success;
} /**
* ftp上传单个文件
*
* @param ftpIP ftp地址
* @param port 端口号
* @param userName ftp的用户名
* @param password ftp的密码
* @param directory 上传至ftp的路径名不包括文件名
* @param localFilePath 要上传的本地文件全路径名
* @param destName 上传至ftp后存储的文件名
* @throws IOException
*/
public static boolean uploadFromFTP(String ftpIP,Integer port,String userName,String password,String directory,String localFilePath,String destName) { FTPClient ftpClient = new FTPClient();
FileInputStream fis = null;
boolean result = false;
try {
ftpClient.connect(ftpIP, port);
ftpClient.login(userName, password);
ftpClient.enterLocalPassiveMode();
// 设置上传目录
ftpClient.changeWorkingDirectory(directory);
ftpClient.setBufferSize(1024);
ftpClient.setConnectTimeout(10*1000);
ftpClient.setControlEncoding("gbk");
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
//防止出现中文文件名是返回null,强制把文件名设置成ISO-8859-1的编码方式进行删除指定文件
ftpClient.deleteFile(directory+new String(destName.getBytes("gbk"),"ISO-8859-1"));
File srcFile = new File(localFilePath);
fis = new FileInputStream(srcFile);
//上传到FTP服务器==防止出现中文文件名是返回null,强制把文件名设置成ISO-8859-1的编码方式进行上传
result = ftpClient.storeFile((directory + new String(destName.getBytes("gbk"),"ISO-8859-1")), fis); } catch (NumberFormatException e) {
System.err.println("FTP端口配置错误:不是数字:");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(fis);
try {
ftpClient.disconnect();
} catch (IOException e) {
throw new RuntimeException("关闭FTP连接发生异常!", e);
}
}
return result;
}
}
FTP文件上传和下载(JAVA)的更多相关文章
- Java实现FTP文件上传与下载
实现FTP文件上传与下载可以通过以下两种种方式实现(不知道还有没有其他方式),分别为:1.通过JDK自带的API实现:2.通过Apache提供的API是实现. 第一种方式 package com.cl ...
- .NET ftp文件上传和下载
文章参考来源地址:https://blog.csdn.net/wybshyy/article/details/52095542 本次对代码进行了一点扩展:将文件上传到ftp指定目录下,若目录不存在则创 ...
- Java 实现ftp 文件上传、下载和删除
本文利用apache ftp工具实现文件的上传下载和删除.具体如下: 1.下载相应的jar包 commons-net-1.4.1.jar 2.实现代码如下: public class FtpUtils ...
- ftp文件上传和下载
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.N ...
- shell 和python 实现ftp文件上传或者下载
一.shell脚本 #####从ftp服务器上的/home/data 到 本地的/home/databackup#####!/bin/bashftp -n<<!open 172.168.1 ...
- FTP文件上传与下载
实现FTP文件上传与下载可以通过以下两种种方式实现(不知道还有没有其他方式),分别为:1.通过JDK自带的API实现:2.通过Apache提供的API是实现. 第一种方式:使用jdk中的ftpClie ...
- Python 基于Python实现Ftp文件上传,下载
基于Python实现Ftp文件上传,下载 by:授客 QQ:1033553122 测试环境: Ftp客户端:Windows平台 Ftp服务器:Linux平台 Python版本:Python 2.7 ...
- java代码实现ftp服务器的文件上传和下载
java代码实现文件上传到ftp服务器: 1:ftp服务器安装: 2:ftp服务器的配置: 启动成功: 2:客户端:代码实现文件的上传与下载: 1:依赖jar包: 2:sftpTools 工具类: ...
- java/struts/Servlet文件下载与ftp文件上传下载
1.前端代码 使用超链接到Struts的Action或Servlet <a target="_blank" href="ftpFileAction!download ...
随机推荐
- IPC之util.h源码解读
/* SPDX-License-Identifier: GPL-2.0 */ /* * linux/ipc/util.h * Copyright (C) 1999 Christoph Rohland ...
- python网络编程:socket套接字
一.socket 二.TCP服务器 三.TCP客户端 四.UDP服务器 五.UDP客户端 六.聊天的客户端 七.聊天的服务器 一.socket """ 学习网络编程 其实 ...
- Ubuntu 18.04 系统 Update 后内核升级到5.0 导致 VMware Workstation 不正常工作
Ubuntu 18.04 系统升级后,发现内核从 4.18 升级到 5.0,从而导致 VMware Workstation 启动主动更新,但总会显示 vmmon 和 vmnet 俩模块编译失败. 感谢 ...
- 异步消息处理机制相关面试问题-intentservice面试问题详解
IntentService是什么? IntentService是继承并处理异步请求的一个类,在IntentService内有一个工作线程来处理耗时操作,启动IntentService方法和启动传统的S ...
- div 可滚动但不显示滚动条
(原) 首先有3个div, 第1个,固定大小是200*200(单位为px,下同) 第2个,不固定大小,其大小要用第3个div把个撑开,但是这个div必需要有滚动条, 第3个,固定大小与第1个div保持 ...
- ubuntu配置jdk(收藏)
ubuntu下JDK配置本质上和win是一样的: 1.去官网下载JDK7,找jdk-7u21-linux-i586.tar.gz并下载:http://www.oracle.com/technetwor ...
- CSS基础学习-12.CSS position
绝对定位 position:absolute,元素脱离文档流,然后使用left.right.top.bottom属性相对于其最接近的一个具有定位属性的祖先元素进行绝对定位.如果不存在这样的祖先元素,则 ...
- JavaScript对象原型
一.MDN上的解释(有点抽象) 基于原型的语言? JavaScript 常被描述为一种基于原型的语言 (prototype-based language)——每个对象拥有一个原型对象,对象以其原型为模 ...
- 服务器syns to listen sockets drop导致创建socket失败
在一次测试执行过程中,发现服务器TCP发送队列较长,执行netstat -s | grep LISTEN,发现有SYNs包被丢弃,但是没有times the listen queue of a soc ...
- java 内部类(简单使用)
什么是内部类 1.内部类是指在一个外部类的内部再定义一个类. 2.内部类作为外部类的一个成员,依附于外部类而存在. 3.内部类可为静态,可用protected和private修饰(而外部类只能使用pu ...