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转发,文件传输等,当然你也可以集成它的功 ...
随机推荐
- hiho1258 Osu! Master
题目链接:http://hihocoder.com/problemset/problem/1258 题目大意:看能连击的次数 思路:水 看有多少个1和s就好了 #include <stdio.h ...
- MobaXterm之取消自动关闭连接 Network error :Connection timed out
连一会就出现连接重来的问题 配置如下.
- 自学Python之路-Python核心编程
自学Python之路-Python核心编程 自学Python之路[第六回]:Python模块 6.1 自学Python6.1-模块简介 6.2 自学Python6.2-类.模块.包 ...
- Dynamic CRM 2015学习笔记(4)修改开发人员资源(发现服务、组织服务和组织数据服务)url地址及组织名
在azure vm上安装了CRM 2015后 Dynamic CRM 2015学习笔记(1)Azure 上安装 CRM 2015, 发现了一个问题,那就是在设置 ->自定义项 –> 开发人 ...
- js笔记-语句,变量
JavaScript介绍 JavaScript是运行在浏览器端的脚步语言,JavaScript主要解决的是前端与用户交互的问题,包括使用交互与数据交互. JavaScript是浏览器解释执行的,前端脚 ...
- Star sky CodeForces - 835C
用一个三维数组cnt[x][y][k]表示从(1, 1)到(x, y)亮度为k的个数,然后查询的时候就是对于每一个亮度,计算出这个亮度t秒后的亮度和当前这个亮度的个数,答案就是他们的乘积, 然后遍历每 ...
- 使用item pipeline处理保存数据
一个Item Pipeline 不需要继承特定基类,只需要实现某些特定方法,面向接口. class MyPipeline(object): def __init__(self): "&quo ...
- python学习day6 数据类型Ⅳ(集合)
day6 数据类型-集合 内容补充: 列表功能: .reverse()反转 v = [1,2,3,4,5,6]v.reverse()print() #[6, 5, 4, 3, 2, 1] .sort( ...
- 项目部署之nginx实现PC端和移动端自动跳转
假设PC端域名为 www.abc.com 移动端域名为m.abc.com PC端nginx配置文件server中加入如下代码: if ($http_host !~ "^www.abc ...
- Day6--Python--小数据池和再谈编码
一.小数据池 参考 目的:缓存我们字符串,整数,布尔值.在使用的时候不需要创建过多的对象 缓存: int, str, bool int: 缓存范围 -5~256 str: 1. 长度小于等于1,直接缓 ...