JAVA FTP 和 SFTP 文件上传 、下载

简介: java FTP 、SFTP的使用
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.util.Properties;
importjava.util.Vector;
importorg.apache.commons.io.IOUtils;
importorg.apache.log4j.Logger;
importcom.jcraft.jsch.Channel;
importcom.jcraft.jsch.ChannelSftp;
importcom.jcraft.jsch.JSch;
importcom.jcraft.jsch.JSchException;
importcom.jcraft.jsch.Session;
importcom.jcraft.jsch.SftpException;
/*** 类说明 sftp工具类*/publicclassSFTPUtil {
privatestaticLoggerlogger=Logger.getLogger(SFTPUtil.class);
privateChannelSftpsftp;
privateSessionsession;
/** SFTP 登录用户名*/privateStringusername;
/** SFTP 登录密码*/privateStringpassword;
/** 私钥 */privateStringprivateKey;
/** SFTP 服务器地址IP地址*/privateStringhost;
/** SFTP 端口*/privateintport;
/*** 构造基于密码认证的sftp对象*/publicSFTPUtil(Stringusername, Stringpassword, Stringhost, intport) {
this.username=username;
this.password=password;
this.host=host;
this.port=port;
    }
/*** 构造基于秘钥认证的sftp对象*/publicSFTPUtil(Stringusername, Stringhost, intport, StringprivateKey) {
this.username=username;
this.host=host;
this.port=port;
this.privateKey=privateKey;
    }
publicSFTPUtil(){}
/*** 连接sftp服务器*/publicvoidlogin(){
try {
JSchjsch=newJSch();
if (privateKey!=null) {
jsch.addIdentity(privateKey);// 设置私钥            }
session=jsch.getSession(username, host, port);
if (password!=null) {
session.setPassword(password);
            }
Propertiesconfig=newProperties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
Channelchannel=session.openChannel("sftp");
channel.connect();
sftp= (ChannelSftp) channel;
        } catch (JSchExceptione) {
e.printStackTrace();
        }
    }
/*** 关闭连接 server*/publicvoidlogout(){
if (sftp!=null) {
if (sftp.isConnected()) {
sftp.disconnect();
            }
        }
if (session!=null) {
if (session.isConnected()) {
session.disconnect();
            }
        }
    }
/*** 将输入流的数据上传到sftp作为文件。文件完整路径=basePath+directory* @param basePath  服务器的基础路径* @param directory  上传到该目录* @param sftpFileName  sftp端文件名* @param input   输入流*/publicvoidupload(StringbasePath,Stringdirectory, StringsftpFileName, InputStreaminput) throwsSftpException{
try {
sftp.cd(basePath);
sftp.cd(directory);
        } catch (SftpExceptione) {
//目录不存在,则创建文件夹String [] dirs=directory.split("/");
StringtempPath=basePath;
for(Stringdir:dirs){
if(null==dir||"".equals(dir)) continue;
tempPath+="/"+dir;
try{
sftp.cd(tempPath);
                }catch(SftpExceptionex){
sftp.mkdir(tempPath);
sftp.cd(tempPath);
                }
            }
        }
sftp.put(input, sftpFileName);  //上传文件    }
/*** 下载文件。* @param directory 下载目录* @param downloadFile 下载的文件* @param saveFile 存在本地的路径*/publicvoiddownload(Stringdirectory, StringdownloadFile, StringsaveFile) throwsSftpException, FileNotFoundException{
if (directory!=null&&!"".equals(directory)) {
sftp.cd(directory);
        }
Filefile=newFile(saveFile);
sftp.get(downloadFile, newFileOutputStream(file));
    }
/*** 下载文件* @param directory 下载目录* @param downloadFile 下载的文件名* @return 字节数组*/publicbyte[] download(Stringdirectory, StringdownloadFile) throwsSftpException, IOException{
if (directory!=null&&!"".equals(directory)) {
sftp.cd(directory);
        }
InputStreamis=sftp.get(downloadFile);
byte[] fileData=IOUtils.toByteArray(is);
returnfileData;
    }
/*** 删除文件* @param directory 要删除文件所在目录* @param deleteFile 要删除的文件*/publicvoiddelete(Stringdirectory, StringdeleteFile) throwsSftpException{
sftp.cd(directory);
sftp.rm(deleteFile);
    }
/*** 列出目录下的文件* @param directory 要列出的目录* @param*/publicVector<?>listFiles(Stringdirectory) throwsSftpException {
returnsftp.ls(directory);
    }
//上传文件测试publicstaticvoidmain(String[] args) throwsSftpException, IOException {
SFTPUtilsftp=newSFTPUtil("neusoft", "neusoft_980544", "192.168.205.4", 22);
sftp.login();
Filefile=newFile("D:\\1.txt");
InputStreamis=newFileInputStream(file);
sftp.upload("/home/neusoft/","ftp", "1.txt", is);
sftp.logout();
    }


* 需要用到的maven jar包


<dependency><groupId>commons-net</groupId><artifactId>commons-net</artifactId><version>3.1</version></dependency><dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version></dependency>
相关文章
|
3月前
|
Java 开发工具
【Azure Storage Account】Java Code访问Storage Account File Share的上传和下载代码示例
本文介绍如何使用Java通过azure-storage-file-share SDK实现Azure文件共享的上传下载。包含依赖引入、客户端创建及完整示例代码,助你快速集成Azure File Share功能。
405 5
|
6月前
|
存储 人工智能 Java
java之通过Http下载文件
本文介绍了使用Java实现通过文件链接下载文件到本地的方法,主要涉及URL、HttpURLConnection及输入输出流的操作。
480 0
|
7月前
|
存储 安全 算法
Java 集合面试题 PDF 下载及高频考点解析
本文围绕Java集合面试题展开,详细解析了集合框架的基本概念、常见集合类的特点与应用场景。内容涵盖`ArrayList`与`LinkedList`的区别、`HashSet`与`TreeSet`的对比、`HashMap`与`ConcurrentHashMap`的线程安全性分析等。通过技术方案与应用实例,帮助读者深入理解集合类的特性和使用场景,提升解决实际开发问题的能力。文末附带资源链接,供进一步学习参考。
189 4
|
11月前
|
Linux 网络安全 Docker
尼恩一键开发环境: vagrant+java+springcloud+redis+zookeeper镜像下载(&制作详解)
尼恩提供了一系列文章,旨在帮助开发者轻松搭建一键开发环境,涵盖Java分布式、高并发场景下的多种技术组件安装与配置。内容包括但不限于Windows和CentOS虚拟机的安装与排坑指南、MySQL、Kafka、Redis、Zookeeper等关键组件在Linux环境下的部署教程,并附带详细的视频指导。此外,还特别介绍了Vagrant这一虚拟环境部署工具,
尼恩一键开发环境: vagrant+java+springcloud+redis+zookeeper镜像下载(&制作详解)
|
11月前
|
Java
java引入本地 MultipartFile 实现多部分文件上传
在Java中,`MultipartFile`通常用于处理通过HTML表单上传的文件。但在某些情况下,需要直接从本地文件系统获取文件并上传。本文介绍如何创建一个实现了`MultipartFile`接口的本地类`LocalMultipartFile`,将本地文件转换为`MultipartFile`对象,简化文件上传流程。此方法适用于批量上传等场景,避免了表单上传的复杂性。代码示例展示了如何实现和使用该类进行文件上传操作。作者:华科云商小彭。链接:[稀土掘金](https://juejin.cn/post/7377559533785530431)。
593 18
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
429 34
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
215 2
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
989 4
|
Web App开发 Java
使用java操作浏览器的工具selenium-java和webdriver下载地址
【10月更文挑战第12天】Selenium-java依赖包用于自动化Web测试,版本为3.141.59。ChromeDriver和EdgeDriver分别用于控制Chrome和Edge浏览器,需确保版本与浏览器匹配。示例代码展示了如何使用Selenium-java模拟登录CSDN,包括设置驱动路径、添加Cookies和获取页面源码。
975 6
|
Java
Java通过HttpClient从外部url下载文件到本地
该Java程序旨在通过URL将外部网络文件(如图片)下载至本地,并解决防盗链问题。首先,它通过`HttpGet`请求获取远程文件,并通过设置`Referer`头防止防盗链。然后,根据响应内容类型确定文件后缀并保存至指定路径。测试表明,程序能够成功下载文件。
1625 8
Java通过HttpClient从外部url下载文件到本地