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服务器的文件上传和下载的更多相关文章

  1. java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息

    1.java使用Jsch实现远程操作linux服务器进行文件上传.下载,删除和显示目录信息. 参考链接:https://www.cnblogs.com/longyg/archive/2012/06/2 ...

  2. Http服务器实现文件上传与下载(一)

    一.引言 大家都知道web编程的协议就是http协议,称为超文本传输协议.在J2EE中我们可以很快的实现一个Web工程,但在C++中就不是非常的迅速,原因无非就是底层的socket网络编写需要自己完成 ...

  3. Http服务器实现文件上传与下载(五)

    一.引言 欢迎大家和我一起编写Http服务器实现文件的上传和下载,现在我回顾一下在上一章节中提到的一些内容,之前我已经提到过文件的下载,在文件的下载中也提到了文件的续下载只需要在响应头中填写Conte ...

  4. Http服务器实现文件上传与下载(四)

    一.引言 欢迎大家来到和我一起编写Http服务器实现文件的上传和下载,现在我稍微回顾一下之前我说的,第一.二章说明说明了整体的HTTP走向,第三章实现底层的网络编程.接着这一章我想给大家讲的是请求获取 ...

  5. Http服务器实现文件上传与下载(二)

    一.引言 欢迎大家接着看我的博客,如何大家有什么想法的话回复我哦,闲话不多聊了,接着上一讲的内容来说吧,在上一节中已经讲到了请求头字符串的解析,并且在解析中我我们已经获取了url.就是上节中提到的/d ...

  6. Http服务器实现文件上传与下载(三)

    一.引言 在前2章的内容基本上已经讲解了整个的大致流程.在设计Http服务器时,我设计为四层的结构,最底层是网络传输层,就是socket编程.接着一层是请求和响应层,叫做Request和Respons ...

  7. 通过JAVA对FTP服务器连接,上传,下载,读取,移动文件等

    记录一次对FTP服务器文件内容 通过Java程序对FTP服务器文件处理:连接,上传,下载,读取,移动文件等. 需求描述:今天接到一个任务,在Java项目中,读取FTP服务器上的一些文件,进行一些业务操 ...

  8. linux命令行模式下对FTP服务器进行文件上传下载

    参考源:点击这里查看   1. 连接ftp服务器 格式:ftp [hostname| ip-address]a)在linux命令行下输入: ftp 192.168.1.1 b)服务器询问你用户名和密码 ...

  9. java之Jsch实现Linux的文件上传与下载

    一.JSch是Java Secure Channel的缩写.JSch是一个SSH2的纯Java实现.它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功 ...

随机推荐

  1. pax3 quick start guide

    pax3 quick start guide 外观图: 配置:1 * pax3 主机:2 * 吸嘴(一个平的,一个凸的):2 * 底盖(一个烟草的,一个烟膏的):3 * 过滤片:1 * USB充:1 ...

  2. 支持markwon写ppt的工具marp-调研

    1.需求 使用markdown写ppt 支持大部分markdown语法,含高亮.公式及表格等 支持转为html,在浏览器中展示 2.调研 符合条件的工具:marp 用法参考 Marp之简单编写PPT格 ...

  3. Dynamic CRM 2015学习笔记(4)修改开发人员资源(发现服务、组织服务和组织数据服务)url地址及组织名

    在azure vm上安装了CRM 2015后 Dynamic CRM 2015学习笔记(1)Azure 上安装 CRM 2015, 发现了一个问题,那就是在设置 ->自定义项 –> 开发人 ...

  4. 【bfs】Knight Moves

    [题目描述] 输入nn代表有个n×nn×n的棋盘,输入开始位置的坐标和结束位置的坐标,问一个骑士朝棋盘的八个方向走马字步,从开始坐标到结束坐标可以经过多少步. [输入] 首先输入一个nn,表示测试样例 ...

  5. 队列模式&主题模式

    # RabbitMQ 消息中间件 **Advanced Message Queuing Protocol (高级消息队列协议** The Advanced Message Queuing Protoc ...

  6. [ZJOI2012]灾难(建图)

    阿米巴是小强的好朋友. 阿米巴和小强在草原上捉蚂蚱.小强突然想,如果蚂蚱被他们捉灭绝了,那么吃蚂蚱的小鸟就会饿死,而捕食小鸟的猛禽也会跟着灭绝,从而引发一系列的生态灾难. 学过生物的阿米巴告诉小强,草 ...

  7. Codeforces Round #533 (Div. 2) C.思维dp D. 多源BFS

    题目链接:https://codeforces.com/contest/1105 C. Ayoub and Lost Array 题目大意:一个长度为n的数组,数组的元素都在[L,R]之间,并且数组全 ...

  8. IO处理要注意的事:关闭资源!关闭资源!关闭资源!

    案例1: 现象: 同事做本地txt数据切分然后处理,发现删除本地临时文件目录中的文件时,有时成功,有时删除完了发现文件还在.代码各处都不报错,且各种日志打印正常. 解决: 最后发现,是业务逻辑代码中有 ...

  9. POJ 3522 Slim Span(极差最小生成树)

    Slim Span Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 9546   Accepted: 5076 Descrip ...

  10. Laravel 下生成验证码的类

    <?php namespace App\Tool\Validate; //验证码类 class ValidateCode { private $charset = 'abcdefghkmnprs ...