java代码实现ftp服务器的文件上传和下载
java代码实现文件上传到ftp服务器:
1:ftp服务器安装:
2:ftp服务器的配置:
启动成功:
2:客户端:代码实现文件的上传与下载:
1:依赖jar包:
2:sftpTools 工具类:
只实现了简单的文件上传和下载,具体业务需根据实际情况再判断条件,使用:
package com.floor.shop.util; import com.jcraft.jsch.*;
import org.slf4j.LoggerFactory; import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.Properties;
import java.util.Vector; public class SftpTools {
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(SftpTools.class); /**
* 连接sftp服务器
*
* @param host 主机
* @param port 端口
* @param username 用户名
* @param password 密码
* @return
*/
public ChannelSftp connect(String host, int port, String username,
String password) {
ChannelSftp sftp = null;
try {
JSch jsch = new JSch();
jsch.getSession(username, host, port);
Session sshSession = jsch.getSession(username, host, port);
logger.info("Session created.");
sshSession.setPassword(password);
Properties sshConfig = new Properties();
sshConfig.put("StrictHostKeyChecking", "no");
sshSession.setConfig(sshConfig);
sshSession.connect();
logger.info("Session connected.");
logger.info("Opening Channel.");
Channel channel = sshSession.openChannel("sftp");
channel.connect();
sftp = (ChannelSftp) channel;
logger.info("Connected to " + host + ".");
} catch (Exception e) {
logger.error(e.getMessage());
}
return sftp;
} /*
*测试文件上传、下载:
* host:ftp服务器的IP地址;
* port:ftp服务器的端口号;
* username:ftp服务器的用户名;
* password:ftp服务器的密码;
* fileUrl:文件的上传路径;
*/
//ftp文件上传:
public static void fileUpload(String fileUrl,String host,int port,String username,String password)
throws FileNotFoundException {
SftpTools sftpTools = new SftpTools();
//连接ftp服务器:
ChannelSftp connect = sftpTools.connect(host, port, username, password);
//创建需要上传的文件对象: (fileUrl:上传文件的路径)
File file = new File(fileUrl);
try {
connect.put(new FileInputStream(file), file.getName());
} catch (SftpException e) {
e.printStackTrace();
}
}
/*
*ftp文件下载:
* saveUrl:保存文件的路径;
* saveName:保存文件的名字;
* downloadFileName:下载的文件名,需要加上后缀;
*/
public static void fileDownLoad(String saveUrl,String saveName,String host,int port,
String username,String password,String downloadFileName) {
SftpTools sftpTools = new SftpTools();
//调用连接ftp的方法:
ChannelSftp connect = sftpTools.connect(host, port, username, password);
try {
//获取ftp服务器存放或读取文件的目录:
String files = connect.pwd();
//进入服务器资源路径:
connect.cd(files);
//创建文件保存路径的对象:(保存的路径:saveUrl;自定义保存的文件名:saveName)
File file = new File(saveUrl+"\\"+saveName);
try {
//下载的文件名:test.jpg
connect.get(downloadFileName, new FileOutputStream(file));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
} catch (SftpException e) {
e.printStackTrace();
}
} /**
* 删除文件
*
* @param directory 要删除文件所在目录
* @param deleteFile 要删除的文件
*/
public static void delete(String directory, String deleteFile,String host,int port,String username,
String password) {
SftpTools sftpTools = new SftpTools();
//连接ftp服务器:
ChannelSftp sftp = sftpTools.connect(host, port, username, password);
try {
sftp.cd(directory);
sftp.rm(deleteFile);
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 检查文件夹是否存在
*
* @param dirPath 文件路径:完整
* @return true :存在; false: 不存在
* @throws SftpException
*/
public static String checkDir(String dirPath,String host,int port, String username, String password) {
SftpTools sftpTools = new SftpTools();
//连接ftp服务器:
ChannelSftp sftp = sftpTools.connect(host, port, username, password);
String exists = "";
try {
String files = sftp.pwd();
if (files.contains(dirPath)) {
return "true";
}
//判断日期目录
Vector content = sftp.ls(dirPath);
if (content == null) {
exists = "false";
} else {
exists = "true";
}
} catch (Exception e) {
exists = "false";
logger.error("判断日期目录出错: " + e.getMessage());
}
return exists; } //检查文件夹是否存在,不存在自动创建文件夹:
public static String checkDirMore(String dirPath,String host,int port, String username,String password) {
//检查//upload目录是否存在
String isDir = checkDir(dirPath,host,port,username,password);
if (isDir.equals("true")) {
return "true";
} else {
boolean isMake = makeDir(dirPath,host,port,username,password);
if (isMake == true) {
return "true";
} else {
return "false";
}
}
} //创建目录:
public static boolean makeDir(String dirPath,String host,int port, String username,String password) {
SftpTools sftpTools = new SftpTools();
//连接ftp服务器:
ChannelSftp sftp = sftpTools.connect(host,port,username,password);
try {
sftp.mkdir(dirPath);
return true;
} catch (SftpException e) {
e.printStackTrace();
logger.error("创建目录失败: " + dirPath);
return false;
}
}
}
详解可参考:http://www.cnblogs.com/longyg/archive/2012/06/25/2561332.html
java代码实现ftp服务器的文件上传和下载的更多相关文章
- java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息
1.java使用Jsch实现远程操作linux服务器进行文件上传.下载,删除和显示目录信息. 参考链接:https://www.cnblogs.com/longyg/archive/2012/06/2 ...
- Http服务器实现文件上传与下载(一)
一.引言 大家都知道web编程的协议就是http协议,称为超文本传输协议.在J2EE中我们可以很快的实现一个Web工程,但在C++中就不是非常的迅速,原因无非就是底层的socket网络编写需要自己完成 ...
- Http服务器实现文件上传与下载(五)
一.引言 欢迎大家和我一起编写Http服务器实现文件的上传和下载,现在我回顾一下在上一章节中提到的一些内容,之前我已经提到过文件的下载,在文件的下载中也提到了文件的续下载只需要在响应头中填写Conte ...
- Http服务器实现文件上传与下载(四)
一.引言 欢迎大家来到和我一起编写Http服务器实现文件的上传和下载,现在我稍微回顾一下之前我说的,第一.二章说明说明了整体的HTTP走向,第三章实现底层的网络编程.接着这一章我想给大家讲的是请求获取 ...
- Http服务器实现文件上传与下载(二)
一.引言 欢迎大家接着看我的博客,如何大家有什么想法的话回复我哦,闲话不多聊了,接着上一讲的内容来说吧,在上一节中已经讲到了请求头字符串的解析,并且在解析中我我们已经获取了url.就是上节中提到的/d ...
- Http服务器实现文件上传与下载(三)
一.引言 在前2章的内容基本上已经讲解了整个的大致流程.在设计Http服务器时,我设计为四层的结构,最底层是网络传输层,就是socket编程.接着一层是请求和响应层,叫做Request和Respons ...
- 通过JAVA对FTP服务器连接,上传,下载,读取,移动文件等
记录一次对FTP服务器文件内容 通过Java程序对FTP服务器文件处理:连接,上传,下载,读取,移动文件等. 需求描述:今天接到一个任务,在Java项目中,读取FTP服务器上的一些文件,进行一些业务操 ...
- linux命令行模式下对FTP服务器进行文件上传下载
参考源:点击这里查看 1. 连接ftp服务器 格式:ftp [hostname| ip-address]a)在linux命令行下输入: ftp 192.168.1.1 b)服务器询问你用户名和密码 ...
- java之Jsch实现Linux的文件上传与下载
一.JSch是Java Secure Channel的缩写.JSch是一个SSH2的纯Java实现.它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功 ...
随机推荐
- 使用 JavaScript, HTML 和 CSS 构建跨平台的桌面应用
https://electronjs.org/ —— 官网 https://github.com/electron/electron-api-demos/releases —— 下载demo 下载安装 ...
- Github Desktop 克隆新项目 Authentication failed. You may not have permission to access the repository or the repository may ha
原来:ssh://git@github.com/xxx.git 改成:https://git@github.com/xxx.git
- scrapy 发送post请求
登录人人网为例 1.想要发送post请求,那么使用'scrapy.FormRequest'方法,可以方便的指定表单数据 2.如果想在爬虫一开始的时候就发送post请求,那么应该重写'start_req ...
- ubuntu配置mysql
1.安装mysql: sudo apt-get install mysql-server sudo apt-get install mysql-client sudo apt-get install ...
- CSS垂直翻转与水平翻转
/*水平翻转*/ .flipx { -moz-transform:scaleX(-1); -webkit-transform:scaleX(-1); -o-transform:scaleX(-1); ...
- 「TJOI2015」旅游 解题报告
「TJOI2015」旅游 LCT沙比题 考虑我们其实是在维护一条链的\(\max\limits_{i<j} v_j-v_i\) 每次直接拿左右子树更新一下就可以了 写的时候把两个方向都维护一下, ...
- Haunted Graveyard ZOJ - 3391(SPFA)
从点(n,1)到点(1,m)的最短路径,可以转换地图成从(1,1)到(n,m)的最短路,因为有负权回路,所以要用spfa来判负环, 注意一下如果负环把终点包围在内的话, 如果用负环的话会输出无穷,但是 ...
- LaTex in Markdown
上次写了Markdown,这次用到了LaTex,也出一期(吐槽,工作量比Markdown高太多...) Markdown基础:https://www.cnblogs.com/dotnetcrazy ...
- bzoj2194 快速傅里叶之二
题意:对于k = 0 ... n求 解: 首先把i变成从0开始 我们发现a和b的次数(下标)是成正比例的,这不可,于是反转就行了. 反转b的话,会发现次数和是n + k,这不可. 反转a就很吼了. 这 ...
- APP reset.css
html { box-sizing: border-box; } * { user-select: none; -webkit-tap-highlight-color: rgba(255,255,25 ...