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. Hdoj 2199.Can you solve this equation? 题解

    Problem Description Now,given the equation 8x^4 + 7x^3 + 2x^2 + 3x + 6 == Y,can you find its solutio ...

  2. Android GPS定位测试(附效果图)

    今天因为工作需要,把以前编写的一个GPS测试程序拿出来重新修改了一下.这个程序说起来有些历史了,是我11年编写的,那时候学了Android开发没多久,算是一个实验性的作品.现在工作需要,重新拿出来修整 ...

  3. HDU 6319 Problem A. Ascending Rating(单调队列)

    要求一个区间内的最大值和每次数过去最大值更新的次数,然后求每次的这个值异或 i 的总和. 这个序列一共有n个数,前k个直接给出来,从k+1到n个数用公式计算出来. 因为要最大值,所以就要用到单调队列, ...

  4. JBoss/Wildfly 配置SQLserver服务器

    JBoss/Wildfly 配置SQLserver服务器 http://blog.csdn.net/haitaolang/article/details/60467118 wildfly standa ...

  5. 移动端利用-webkit-box水平垂直居中(旧弹性盒)

    新弹性盒水平垂直居中参考:http://www.cnblogs.com/ooo0/p/7562884.html 新旧弹性盒样式参考:http://www.cnblogs.com/ooo0/p/7562 ...

  6. QML-开发中遇到的错误收集

    作者:狐狸家的鱼 关于一个前端来做qml界面开发,不会写cpp又只能大概看懂意思,遇到的很多问题都不知道怎么解决而急得拔头发. 遇到的问题都是我这种菜鸟渣渣才会导致的问题,写下解决过程方便以后查看. ...

  7. Git中撤销提交

    Git的几种状态 未修改 原始内容 已修改 ↓ 工 作 区 已暂存 ↓ git add 暂 存 区 已提交 ↓ git commit 本地仓库 已推送 ↓ git push 远程仓库 注意:下面所有命 ...

  8. bzoj4566 找相同字符

    题意:给定两个字符串,从中各取一个子串使之相同,有多少种取法.允许本质相同. 解:建立广义后缀自动机,对于每个串,分别统计cnt,之后每个点的cnt乘起来.记得开long long #include ...

  9. bfs退出条件

    找到结果即退出? Possibly Not! 如拓展(x)将导致距离增加0(x)或1(x+1),[这种情况用优先队列] 那么该拓展得到的结果也许并不是最优的,后面还有x. 所以最好的是遍历(不知怎么说 ...

  10. C++的静态成员变量使用方法

    main.cpp:(.text._ZN6Object4useSEv[_ZN6Object4useSEv]+0x1a):对‘Object::i’未定义的引用 常用Java不懂C++的静态方法使用方式.尝 ...