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>
相关文章
|
9天前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
21 4
|
14天前
|
Web App开发 Java
使用java操作浏览器的工具selenium-java和webdriver下载地址
【10月更文挑战第12天】Selenium-java依赖包用于自动化Web测试,版本为3.141.59。ChromeDriver和EdgeDriver分别用于控制Chrome和Edge浏览器,需确保版本与浏览器匹配。示例代码展示了如何使用Selenium-java模拟登录CSDN,包括设置驱动路径、添加Cookies和获取页面源码。
|
1月前
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
56 2
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
|
1月前
|
存储 前端开发 Java
Java后端如何进行文件上传和下载 —— 本地版(文末配绝对能用的源码,超详细,超好用,一看就懂,博主在线解答) 文件如何预览和下载?(超简单教程)
本文详细介绍了在Java后端进行文件上传和下载的实现方法,包括文件上传保存到本地的完整流程、文件下载的代码实现,以及如何处理文件预览、下载大小限制和运行失败的问题,并提供了完整的代码示例。
308 1
|
3月前
|
Java
Java通过HttpClient从外部url下载文件到本地
该Java程序旨在通过URL将外部网络文件(如图片)下载至本地,并解决防盗链问题。首先,它通过`HttpGet`请求获取远程文件,并通过设置`Referer`头防止防盗链。然后,根据响应内容类型确定文件后缀并保存至指定路径。测试表明,程序能够成功下载文件。
460 8
Java通过HttpClient从外部url下载文件到本地
|
2月前
|
存储 缓存 监控
Java——图片文件位于 bin 目录下,下载新图片会导致应用程序重启
【9月更文挑战第22天】在Java应用中,若图片位于bin目录下且下载新图片导致应用重启,可能是因为部署方式不当或资源监控机制过于敏感。解决方法包括:更改图片存储位置至独立目录;配置应用服务器减少资源监控敏感度;使用独立资源服务器托管静态资源;优化代码减少资源重复加载。具体方案需根据应用实际情况和技术栈调整。
|
2月前
|
JSON 前端开发 JavaScript
java中post请求调用下载文件接口浏览器未弹窗而是返回一堆json,为啥
客户端调接口需要返回另存为弹窗,下载文件,但是遇到的问题是接口调用成功且不报错,浏览器F12查看居然返回一堆json,而没有另存为弹窗; > 正确的效果应该是:接口调用成功且浏览器F12不返回任何json,而是弹窗另存为窗口,直接保存文件即可。
126 2
|
1月前
|
Java
java 文件上传和下载
java 文件上传和下载
21 0
|
4月前
|
Java
java 文件上传 :MultipartFile 类型转换为file类型
java 文件上传 :MultipartFile 类型转换为file类型
163 9
|
3月前
|
存储 Java 开发工具
【Azure Developer】VS Code运行Java 版Azure Storage SDK操作Blob (新建Container, 上传Blob文件,下载及清理)
【Azure Developer】VS Code运行Java 版Azure Storage SDK操作Blob (新建Container, 上传Blob文件,下载及清理)