package com.teradata.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URLEncoder;
import org.apache.commons.io.IOUtils;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
public class FtpTest {
public static void main(String[] args) {
// testUpload();
testDownload();
}
/**
* FTP上传单个文件测试
*/
public static void testUpload() {
FTPClient ftpClient = new FTPClient();
FileInputStream fis = null;
try {
ftpClient.connect("127.0.0.1");
ftpClient.login("admin", "123");
File srcFile = new File("C:\\new.gif");
fis = new FileInputStream(srcFile);
// 设置上传目录
ftpClient.changeWorkingDirectory("/admin/pic");
ftpClient.setBufferSize(1024);
ftpClient.setControlEncoding("GBK");
// 设置文件类型(二进制)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.storeFile("3.gif", fis);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("FTP客户端出错!", e);
} finally {
IOUtils.closeQuietly(fis);
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("关闭FTP连接发生异常!", e);
}
}
}
/**
* FTP下载单个文件测试
*/
public static void testDownload1() {
FTPClient ftpClient = new FTPClient();
FileOutputStream fos = null;
try {
ftpClient.connect("127.0.0.1");
ftpClient.login("f1", "123456");
//String remoteFileName = "E:\\FTP\\Remote\\";
//fos = new FileOutputStream("E:/FTP/dfff.txt");
FTPFile[] fs = ftpClient.listFiles();
ftpClient.setBufferSize(1024);
// 设置文件类型(二进制)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
for (int i = 0; i < fs.length; i++) {
FTPFile ff = fs[i];
FileOutputStream outputStream = new FileOutputStream("E:/FTP/"+ff.getName());
//ff.getName().equals(fileName)
if (true) {
//String filename = fileName;
// 这个就就是弹出下载对话框的关键代码
/*response.setHeader("Content-disposition",
"attachment;filename="
+ URLEncoder.encode(filename, "utf-8"));*/
// 将文件保存到输出流outputStream中
ftpClient.retrieveFile(new String(ff.getName().getBytes("GBK"),"ISO-8859-1"), outputStream);
outputStream.flush();
outputStream.close();
}
}
// ftpClient.changeWorkingDirectory(remoteFileName);
//ftpClient.retrieveFile(remoteFileName + "3333.txt", fos);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("FTP客户端出错!", e);
} finally {
IOUtils.closeQuietly(fos);
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("关闭FTP连接发生异常!", e);
}
}
}
public static void testDownload() {
FTPClient ftpClient = new FTPClient();
FileOutputStream fos = null;
try {
ftpClient.connect("127.0.0.1");
//登錄之後就是給用戶配置的默认地址
//对于window,假定配置了E://FTP,
//登录时服务端看到的登录的起始目录是/
ftpClient.login("f1", "123456");
String remoteFileName = "fff.txt";
fos = new FileOutputStream("E:/FTP/dfff.txt");
ftpClient.setBufferSize(1024);
// 设置文件类型(二进制)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.retrieveFile(remoteFileName, fos);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("FTP客户端出错!", e);
} finally {
IOUtils.closeQuietly(fos);
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("关闭FTP连接发生异常!", e);
}
}
}
}
package com.teradata.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.Properties;
import java.util.Vector;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpATTRS;
import com.jcraft.jsch.SftpException;
import com.jcraft.jsch.ChannelSftp.LsEntry;
public class BSFTPTest {
private String host;
private String username;
private String password;
private int port = 22;
private ChannelSftp sftp = null;
private Session sshSession = null;
public BSFTPTest() {
}
public BSFTPTest(String host, String username, String password, int port) {
this.host = host;
this.username = username;
this.password = password;
this.port = port;
}
public BSFTPTest(String host, String username, String password) {
this.host = host;
this.username = username;
this.password = password;
}
/**
* connect server via sftp
*/
public boolean connect() {
try {
JSch jsch = new JSch();
sshSession = jsch.getSession(username, host, port);
System.out.println("Session created.");
sshSession.setPassword(password);
Properties sshConfig = new Properties();
sshConfig.put("StrictHostKeyChecking", "no");
sshSession.setConfig(sshConfig);
sshSession.setPort(21);
sshSession.connect();
System.out.println("Session connected.");
System.out.println("Opening Channel.");
Channel channel = sshSession.openChannel("sftp");
channel.connect();
sftp = (ChannelSftp) channel;
System.out.println("Connected to " + host + ".");
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 关闭资源
*/
public void disconnect() {
if (this.sftp != null) {
if (this.sftp.isConnected()) {
this.sftp.disconnect();
System.out.println("sftp is closed already");
}
}
if (this.sshSession != null) {
if (this.sshSession.isConnected()) {
this.sshSession.disconnect();
System.out.println("sshSession is closed already");
}
}
}
/**
* 批量下载文件
*
* @param remotPath
* 远程下载目录(以路径符号结束)
* @param localPath
* 本地保存目录(以路径符号结束)
* @param fileFormat
* 下载文件格式(以特定字符开头,为空不做检验)
* @param del
* 下载后是否删除sftp文件
* @return
*/
public boolean batchDownLoadFile(String remotPath, String localPath,
String fileFormat, boolean del) {
try {
sftp.cd(remotPath);
//Vector v = listFiles(remotPath);
Vector v = sftp.ls(remotPath);
if (v.size() > 0) {
Iterator it = v.iterator();
while (it.hasNext()) {
LsEntry entry = (LsEntry) it.next();
String filename = entry.getFilename();
SftpATTRS attrs = entry.getAttrs();
if (!attrs.isDir()) {
if (fileFormat != null && !"".equals(fileFormat.trim())) {
if (filename.startsWith(fileFormat)) {
if (this.downloadFile(remotPath, filename,
localPath, filename) && del) {
deleteSFTP(remotPath, filename);
}
}
} else {
if (this.downloadFile(remotPath, filename,
localPath, filename) && del) {
deleteSFTP(remotPath, filename);
}
}
}
}
}
} catch (SftpException e) {
e.printStackTrace();
} finally {
this.disconnect();
}
return false;
}
/**
* 下载单个文件
*
* @param remotPath
* 远程下载目录(以路径符号结束)
* @param remoteFileName
* 下载文件名
* @param localPath
* 本地保存目录(以路径符号结束)
* @param localFileName
* 保存文件名
* @return
*/
public boolean downloadFile(String remotePath, String remoteFileName,
String localPath, String localFileName) {
try {
File file = new File(localPath + localFileName);
mkdirs(localPath + localFileName);
sftp.get(remoteFileName, new FileOutputStream(file));
return true;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (SftpException e) {
e.printStackTrace();
}
return false;
}
/**
* 上传单个文件
*
* @param remotePath
* 远程保存目录
* @param remoteFileName
* 保存文件名
* @param localPath
* 本地上传目录(以路径符号结束)
* @param localFileName
* 上传的文件名
* @return
*/
public boolean uploadFile(String remotePath, String remoteFileName,
String localPath, String localFileName) {
FileInputStream in = null;
try {
createDir(remotePath);
File file = new File(localPath + localFileName);
in = new FileInputStream(file);
sftp.put(in, remoteFileName);
return true;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (SftpException e) {
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return false;
}
/**
* 批量上传文件
*
* @param remotePath
* 远程保存目录
* @param localPath
* 本地上传目录(以路径符号结束)
* @param del
* 上传后是否删除本地文件
* @return
*/
public boolean bacthUploadFile(String remotePath, String localPath,
boolean del) {
try {
connect();
File file = new File(localPath);
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isFile()
&& files[i].getName().indexOf("bak") == -1) {
if (this.uploadFile(remotePath, files[i].getName(),
localPath, files[i].getName()) && del) {
deleteFile(localPath + files[i].getName());
}
}
}
return true;
} catch (Exception e) {
e.printStackTrace();
} finally {
this.disconnect();
}
return false;
}
/**
* 删除本地文件
*
* @param filePath
* @return
*/
public boolean deleteFile(String filePath) {
File file = new File(filePath);
if (!file.exists()) {
return false;
}
if (!file.isFile()) {
return false;
}
return file.delete();
}
/**
* 创建目录
*
* @param createpath
* @return
*/
public boolean createDir(String createpath) {
try {
if (isDirExist(createpath)) {
this.sftp.cd(createpath);
return true;
}
String pathArry[] = createpath.split("/");
StringBuffer filePath = new StringBuffer("/");
for (String path : pathArry) {
if (path.equals("")) {
continue;
}
filePath.append(path + "/");
if (isDirExist(filePath.toString())) {
sftp.cd(filePath.toString());
} else {
// 建立目录
sftp.mkdir(filePath.toString());
// 进入并设置为当前目录
sftp.cd(filePath.toString());
}
}
this.sftp.cd(createpath);
return true;
} catch (SftpException e) {
e.printStackTrace();
}
return false;
}
/**
* 判断目录是否存在
*
* @param directory
* @return
*/
public boolean isDirExist(String directory) {
boolean isDirExistFlag = false;
try {
SftpATTRS sftpATTRS = sftp.lstat(directory);
isDirExistFlag = true;
return sftpATTRS.isDir();
} catch (Exception e) {
if (e.getMessage().toLowerCase().equals("no such file")) {
isDirExistFlag = false;
}
}
return isDirExistFlag;
}
/**
* 删除stfp文件
*
* @param directory
* 要删除文件所在目录
* @param deleteFile
* 要删除的文件
* @param sftp
*/
public void deleteSFTP(String directory, String deleteFile) {
try {
sftp.cd(directory);
sftp.rm(deleteFile);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 如果目录不存在就创建目录
*
* @param path
*/
public void mkdirs(String path) {
File f = new File(path);
String fs = f.getParent();
f = new File(fs);
if (!f.exists()) {
f.mkdirs();
}
}
/**
* 列出目录下的文件
*
* @param directory
* 要列出的目录
* @param sftp
* @return
* @throws SftpException
*/
public Vector listFiles(String directory) throws SftpException {
return sftp.ls(directory);
}
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public ChannelSftp getSftp() {
return sftp;
}
public void setSftp(ChannelSftp sftp) {
this.sftp = sftp;
}
public static void main(String[] args) {
String hosts = Constant.getStPara("hosts");
String user = Constant.getStPara("user");
String pwd = Constant.getStPara("pwd");
BSFTPTest ftp = new BSFTPTest(hosts,user,pwd);
String localPath = Constant.getStPara("localPath");
String remotePath = Constant.getStPara("remotePath");
ftp.connect();
ftp.batchDownLoadFile(remotePath, localPath, null, false);
ftp.disconnect();
System.exit(0);
}
}
package com.teradata.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.Properties;
import java.util.Vector;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;
/**
*/
public class SFtpTest {
/**
* 连接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();
Session sshSession = jsch.getSession(username, host, port);
System.out.println("Session created.");
sshSession.setPassword(password);
Properties sshConfig = new Properties();
sshConfig.put("StrictHostKeyChecking", "no");
// sshConfig.put("PasswordAuthentication", "no");
sshSession.setConfig(sshConfig);
sshSession.connect();
System.out.println("Session connected.");
System.out.println("Opening Channel.");
Channel channel = sshSession.openChannel("sftp");
channel.connect();
sftp = (ChannelSftp) channel;
System.out.println("Connected to " + host + ".");
} catch (Exception e) {
e.printStackTrace();
}
return sftp;
}
/**
* 上传文件
*
* @param directory
* 上传的目录
* @param uploadFile
* 要上传的文件
* @param sftp
*/
public void upload(String directory, String uploadFile, ChannelSftp sftp) {
try {
sftp.cd(directory);
File file = new File(uploadFile);
sftp.put(new FileInputStream(file), file.getName());
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 下载文件
*
* @param directory
* 下载目录
* @param downloadFile
* 下载的文件
* @param saveFile
* 存在本地的路径
* @param sftp
*/
public void download(String directory, String downloadFile,
String saveFile, ChannelSftp sftp) {
try {
sftp.cd(directory);
File file = new File(saveFile);
sftp.get(downloadFile, new FileOutputStream(file));
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 删除文件
*
* @param directory
* 要删除文件所在目录
* @param deleteFile
* 要删除的文件
* @param sftp
*/
public void delete(String directory, String deleteFile, ChannelSftp sftp) {
try {
sftp.cd(directory);
sftp.rm(deleteFile);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 列出目录下的文件
*
* @param directory
* 要列出的目录
* @param sftp
* @return
* @throws SftpException
*/
public Vector listFiles(String directory, ChannelSftp sftp)
throws SftpException {
return sftp.ls(directory);
}
public static void main(String[] args) throws JSchException {
SFtpTest sf = new SFtpTest();
String host = "192.168.1.104";
int port = 22;
String username = "root";
String password = "root";
String directory = "/root/";
String downloadFile = "tdebg.jpg";
String saveFile = "E:/FTP/jjj.jpg";
ChannelSftp sftp = sf.connect(host, port, username, password);
// sf.upload(directory, uploadFile, sftp);
try {
sftp.cd(directory);
File file = new File(saveFile);
sftp.get(downloadFile, new FileOutputStream(file));
System.out.println("download file success, file:" + downloadFile);
} catch (SftpException e) {
e.printStackTrace();
}catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
// 如果没有sesstion的disconnect,程序不会退出
sftp.getSession().disconnect();
sftp.disconnect();
sftp.exit();
}
}
}
相关推荐
内容概要:java common来操作的ftp和sftp。读取文件、操作文件、删除文件、移动文件(文件改名)等一系列操作,只要导入依赖.txt里面的依赖,就可以直接使用,test类用来快速使用,提示都给足了,ftp的一系列操作...
SecureFX[FTP SFTP客户端] v7.0.3 破解版 破解注册方法: 1.解压后安装Steup 2.安装完毕,将Keygen文件夹底下的Keygen.exe复制到安装目录下,点击Patch补丁,会出现一个backup文件夹算成功。 3.运行SecureFX,弹出...
FTP(File Transfer Protocol)和SFTP(Secure File Transfer Protocol)是两种常见的文件传输协议,用于在互联网上安全地上传、下载文件。FTP是最基础的文件传输协议,而SFTP则是基于SSH(Secure Shell)的更安全...
在Java编程环境中,FTP(File Transfer Protocol)和SFTP(Secure File Transfer Protocol)是两种用于在客户端和服务器之间传输文件的协议。Apache提供了一系列的库,使得开发者能够方便地在Java应用中集成FTP和...
6. **安全性**:考虑到标签中有"SFTP",虽然FTP本身不提供加密,但开发者可能会实现FTPS(FTP over SSL/TLS)或者SFTP(Secure File Transfer Protocol,基于SSH),以增强文件传输的安全性。 在"XiongFtp"这个...
ftp sftp协议上传文件区别,具体代码实现,可以参考很好的代码材料
window下bat操作ftp、sftp,脚本已完善,只需要修改配置即可。本脚本是参照https://download.csdn.net/download/housonglin1213/10127890进行修的,分值是系统设置的,没分的话可以从前面的链接中下载
MobaXterm 是一款增强型终端、X服务器和Unix命令集(GNU/ Cygwin)封装在一个单一的便携式exe文件。MobaXterm可以开启多个终端视窗,以最新的X服务器为基础的X.Org,可以轻松地来试用Unix / Linux上的GNU Unix命令
它提供了图形化的用户界面,操作简单直观,支持FTP、FTPS(FTP over TLS/SSL)以及SFTP等多种协议。以下是FileZilla的一些关键特性: 1. **多平台支持**:FileZilla可在Windows、Linux和macOS等操作系统上运行,...
NULL 博文链接:https://lindows.iteye.com/blog/250576
在这款编辑器中,FTP(File Transfer Protocol)和SFTP(Secure File Transfer Protocol)扩展插件是极其重要的组成部分,它们允许用户直接在编辑器中管理远程服务器上的文件,极大地提升了开发和协作的效率。...
### Nginx 转发 SFTP 和 FTP 的配置详解 #### 一、引言 在互联网技术领域中,Nginx(发音为 “engine X”)是一款高性能的HTTP和反向代理服务器,同时它也支持邮件代理服务。随着版本的不断更新与优化,Nginx 在...
在Windows平台上进行FTP(文件传输协议)和SFTP(安全文件传输协议)的文件与文件夹的下载和上传,通常需要使用特定的库来实现。本项目提供的是一套完整的C++工程源代码,包含了FTP和SFTP的客户端功能,便于开发者在...
xlight ftp 内含key 绿色版
Xlight FTP Server v3.62绿色破解版,战胜及少系统资源
FTP(File Transfer Protocol)与SFTP(Secure File Transfer Protocol)都是用于在计算机网络间传输文件的协议,但它们之间存在着显著的区别。FTP是Internet上最古老的文件传输协议之一,而SFTP是在FTP基础上添加了...
FTP(File Transfer Protocol)与SFTP(Secure File Transfer Protocol)是两种常见的文件传输协议,用于在互联网上安全地上传、下载文件。它们都是网络通信协议,但提供了不同级别的安全性。 FTP是最原始的文件...
xlight ftp 服务器端,很好用的一个轻量级ftp软件,serv-u越来越难用,这个可以替代 安装后将xlight.exe替换掉,然后注册机注册即可
cmdftp.sh $1 : 主机IP $2 :用户名 $3 :用户密码 $4 : 本地文件路径 $5 :FTP服务器文件路径 $6 :mput/mget 命令 $7 :要操作的文件名称 cmdsftp.sh $1 : 主机IP $2 :用户名 $4 : 本地文件路径 $5 :FTP服务器...
Java中的FTP(File Transfer Protocol)和SFTP(Secure File Transfer Protocol)是两种用于在客户端和服务器之间传输文件的协议。FTP是一种基于TCP的协议,它允许用户上传、下载和管理远程服务器上的文件。然而,...