java向SFTP服务器上传文件,如何判断服务器上的文件夹是不是存在?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java向SFTP服务器上传文件,如何判断服务器上的文件夹是不是存在?相关的知识,希望对你有一定的参考价值。
FTPClient可以用ftp.changeWorkingDirectory()方法判断;
使用jsch.jar 里的com.jcraft.jsch.ChannelSftp;如何判断服务器上的文件夹是否存在?
使用这种方法可以
try
sftp.cd(directory);
catch(SftpException sException)
if(sftp.SSH_FX_NO_SUCH_FILE == sException.id)
makeDir(directory,sftp);
sftp.cd(directory);
如果你的JAVA部署的tomcat,就是你要查找文件的服务器,那就用:
File file = new File("文件路径")。
如果你本地的JAVA想要访问远程的一个服务器的文件是否存在,就得用如下方法:
URL url = new URL(“文件路径:可以是本地服务器的路径,也可以是远程服务器的路径”)
HttpURLConnection urlcon = (HttpURLConnection) url.openConnection();
//message = urlcon.getHeaderField(0);
//文件存在‘HTTP/1.1 200 OK’ 文件不存在 ‘HTTP/1.1 404 Not Found’
Long TotalSize=Long.parseLong(urlcon.getHeaderField("Content-Length"));
if (TotalSize>0)
return true;
else
return false;
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
参考技术A 打印lsEntry.getLongname()为drwxr-xr-x 2 root root 4096 May 22 15:30 properties 文件夹
-rw-r--r-- 1 root root 609518567 Jun 11 16:43 123.zip 文件
ChannelSftp sftp = sf.connect(host, port, username, password);
Vector<LsEntry> vector = new Vector<LsEntry>();
try
vector = sftp.ls("/");
Iterator<LsEntry> it = vector.iterator();
while (it.hasNext())
LsEntry lsEntry = it.next();
System.out.println(lsEntry.getLongname());
System.out.println(lsEntry.getLongname().startsWith("d"));
catch (Exception e)
e.printStackTrace();
//lsEntry.getLongname().startsWith("d") 来判断是不是文件夹 参考技术B Vector content = sftp.ls(file.getName());
if(content == null)
sftp.mkdir(file.getName());
参考技术C File f = new File("");
f.isFile()追问
这个方法不行 他判断的是本地路径 没有判断远程服务器路径
参考技术D 自己看下io包就明白,File类java通过sftp上传文件
转载:http://blog.csdn.net/yhl_jxy/article/details/72633034
Linux操作系统我们经常使用ssh中的ftp,sftp连接服务器,做相应操作。
如何通过java代码的形式采用sftp连接到服务器,进行文件上传下载等操作呢?
第一步,引入依赖包
- <!-- sftp上传依赖包 -->
- <dependency>
- <groupId>com.jcraft</groupId>
- <artifactId>jsch</artifactId>
- <version>0.1.53</version>
- </dependency>
- package com.guohuai.util;
- import java.io.ByteArrayInputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.UnsupportedEncodingException;
- import java.util.Properties;
- import java.util.Vector;
- import org.apache.commons.io.IOUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- 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;
- /**
- *
- * @ClassName: SFTPUtil
- * @Description: sftp连接工具类
- * @date 2017年5月22日 下午11:17:21
- * @version 1.0.0
- */
- public class SFTPUtil {
- private transient Logger log = LoggerFactory.getLogger(this.getClass());
- private ChannelSftp sftp;
- private Session session;
- /** FTP 登录用户名*/
- private String username;
- /** FTP 登录密码*/
- private String password;
- /** 私钥 */
- private String privateKey;
- /** FTP 服务器地址IP地址*/
- private String host;
- /** FTP 端口*/
- private int port;
- /**
- * 构造基于密码认证的sftp对象
- * @param userName
- * @param password
- * @param host
- * @param port
- */
- public SFTPUtil(String username, String password, String host, int port) {
- this.username = username;
- this.password = password;
- this.host = host;
- this.port = port;
- }
- /**
- * 构造基于秘钥认证的sftp对象
- * @param userName
- * @param host
- * @param port
- * @param privateKey
- */
- public SFTPUtil(String username, String host, int port, String privateKey) {
- this.username = username;
- this.host = host;
- this.port = port;
- this.privateKey = privateKey;
- }
- public SFTPUtil(){}
- /**
- * 连接sftp服务器
- *
- * @throws Exception
- */
- public void login(){
- try {
- JSch jsch = new JSch();
- if (privateKey != null) {
- jsch.addIdentity(privateKey);// 设置私钥
- log.info("sftp connect,path of private key file:{}" , privateKey);
- }
- log.info("sftp connect by host:{} username:{}",host,username);
- session = jsch.getSession(username, host, port);
- log.info("Session is build");
- if (password != null) {
- session.setPassword(password);
- }
- Properties config = new Properties();
- config.put("StrictHostKeyChecking", "no");
- session.setConfig(config);
- session.connect();
- log.info("Session is connected");
- Channel channel = session.openChannel("sftp");
- channel.connect();
- log.info("channel is connected");
- sftp = (ChannelSftp) channel;
- log.info(String.format("sftp server host:[%s] port:[%s] is connect successfull", host, port));
- } catch (JSchException e) {
- log.error("Cannot connect to specified sftp server : {}:{} \n Exception message is: {}", new Object[]{host, port, e.getMessage()});
- }
- }
- /**
- * 关闭连接 server
- */
- public void logout(){
- if (sftp != null) {
- if (sftp.isConnected()) {
- sftp.disconnect();
- log.info("sftp is closed already");
- }
- }
- if (session != null) {
- if (session.isConnected()) {
- session.disconnect();
- log.info("sshSession is closed already");
- }
- }
- }
- /**
- * 将输入流的数据上传到sftp作为文件
- *
- * @param directory
- * 上传到该目录
- * @param sftpFileName
- * sftp端文件名
- * @param in
- * 输入流
- * @throws SftpException
- * @throws Exception
- */
- public void upload(String directory, String sftpFileName, InputStream input) throws SftpException{
- try {
- sftp.cd(directory);
- } catch (SftpException e) {
- log.warn("directory is not exist");
- sftp.mkdir(directory);
- sftp.cd(directory);
- }
- sftp.put(input, sftpFileName);
- log.info("file:{} is upload successful" , sftpFileName);
- }
- /**
- * 上传单个文件
- *
- * @param directory
- * 上传到sftp目录
- * @param uploadFile
- * 要上传的文件,包括路径
- * @throws FileNotFoundException
- * @throws SftpException
- * @throws Exception
- */
- public void upload(String directory, String uploadFile) throws FileNotFoundException, SftpException{
- File file = new File(uploadFile);
- upload(directory, file.getName(), new FileInputStream(file));
- }
- /**
- * 将byte[]上传到sftp,作为文件。注意:从String生成byte[]是,要指定字符集。
- *
- * @param directory
- * 上传到sftp目录
- * @param sftpFileName
- * 文件在sftp端的命名
- * @param byteArr
- * 要上传的字节数组
- * @throws SftpException
- * @throws Exception
- */
- public void upload(String directory, String sftpFileName, byte[] byteArr) throws SftpException{
- upload(directory, sftpFileName, new ByteArrayInputStream(byteArr));
- }
- /**
- * 将字符串按照指定的字符编码上传到sftp
- *
- * @param directory
- * 上传到sftp目录
- * @param sftpFileName
- * 文件在sftp端的命名
- * @param dataStr
- * 待上传的数据
- * @param charsetName
- * sftp上的文件,按该字符编码保存
- * @throws UnsupportedEncodingException
- * @throws SftpException
- * @throws Exception
- */
- public void upload(String directory, String sftpFileName, String dataStr, String charsetName) throws UnsupportedEncodingException, SftpException{
- upload(directory, sftpFileName, new ByteArrayInputStream(dataStr.getBytes(charsetName)));
- }
- /**
- * 下载文件
- *
- * @param directory
- * 下载目录
- * @param downloadFile
- * 下载的文件
- * @param saveFile
- * 存在本地的路径
- * @throws SftpException
- * @throws FileNotFoundException
- * @throws Exception
- */
- public void download(String directory, String downloadFile, String saveFile) throws SftpException, FileNotFoundException{
- if (directory != null && !"".equals(directory)) {
- sftp.cd(directory);
- }
- File file = new File(saveFile);
- sftp.get(downloadFile, new FileOutputStream(file));
- log.info("file:{} is download successful" , downloadFile);
- }
- /**
- * 下载文件
- * @param directory 下载目录
- * @param downloadFile 下载的文件名
- * @return 字节数组
- * @throws SftpException
- * @throws IOException
- * @throws Exception
- */
- public byte[] download(String directory, String downloadFile) throws SftpException, IOException{
- if (directory != null && !"".equals(directory)) {
- sftp.cd(directory);
- }
- InputStream is = sftp.get(downloadFile);
- byte[] fileData = IOUtils.toByteArray(is);
- log.info("file:{} is download successful" , downloadFile);
- return fileData;
- }
- /**
- * 删除文件
- *
- * @param directory
- * 要删除文件所在目录
- * @param deleteFile
- * 要删除的文件
- * @throws SftpException
- * @throws Exception
- */
- public void delete(String directory, String deleteFile) throws SftpException{
- sftp.cd(directory);
- sftp.rm(deleteFile);
- }
- /**
- * 列出目录下的文件
- *
- * @param directory
- * 要列出的目录
- * @param sftp
- * @return
- * @throws SftpException
- */
- public Vector<?> listFiles(String directory) throws SftpException {
- return sftp.ls(directory);
- }
- public static void main(String[] args) throws SftpException, IOException {
- SFTPUtil sftp = new SFTPUtil("lanhuigu", "123456", "192.168.200.12", 22);
- sftp.login();
- //byte[] buff = sftp.download("/opt", "start.sh");
- //System.out.println(Arrays.toString(buff));
- File file = new File("D:\\upload\\index.html");
- InputStream is = new FileInputStream(file);
- sftp.upload("/data/work", "test_sftp_upload.csv", is);
- sftp.logout();
- }
- }
以上是关于java向SFTP服务器上传文件,如何判断服务器上的文件夹是不是存在?的主要内容,如果未能解决你的问题,请参考以下文章