sftp

转载 2011年01月09日 18:34:00


package net.xwolf.ultility;


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.InputStreamReader;
import java.io.LineNumberReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException; public class FtpImpl{
   
   
private String host = "127.0.0.1";
   
private String username="MingMac";
   
private String password="×××";
   
private int port = 22;
   
private ChannelSftp sftp = null;
   
private String localPath = "/Users/MingMac/Documents";
   
private String remotePath = "/Users/MingMac/MyDocuments";
   
private String fileListPath = "/Users/MingMac/Documents/Java/workspace/MyTools/conf/file.txt";
   
private final String seperator = "/";
   
   
/**
     * connect server via sftp
    
*/
   
public void connect() {
       
try {
           
if(sftp != null){
                System.out.println(
"sftp is not null");
            }
            JSch jsch
= new JSch();
            jsch.getSession(username, host, port);
            Session 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.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();
        }
    }
   
/**
     * Disconnect with server
    
*/
   
public void disconnect() {
       
if(this.sftp != null){
           
if(this.sftp.isConnected()){
               
this.sftp.disconnect();
            }
else if(this.sftp.isClosed()){
                System.out.println(
"sftp is closed already");
            }
        }

    }

   
public void download() {
       
// TODO Auto-generated method stub
       

    }
   
   
   
private 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();
        }
    }
   
   
/**
     * upload all the files to the server
    
*/
   
public void upload() {
        List
<String> fileList = this.getFileEntryList(fileListPath);
       
try {
           
if(fileList != null){
               
for (String filepath : fileList) {
                    String localFile
= this.localPath + this.seperator+ filepath;
                    File file
= new File(localFile);
                   
                   
if(file.isFile()){
                        System.out.println(
"localFile : " + file.getAbsolutePath());
                        String remoteFile
= this.remotePath + this.seperator + filepath;
                        System.out.println(
"remotePath:" + remoteFile);
                        File rfile
= new File(remoteFile);
                        String rpath
= rfile.getParent();
                       
try {
                            createDir(rpath, sftp);
                        }
catch (Exception e) {
                            System.out.println(
"*******create path failed" + rpath);
                        }

                       
this.sftp.put(new FileInputStream(file), file.getName());
                        System.out.println(
"=========upload down for " + localFile);
                    }
                }
            }
        }
catch (FileNotFoundException e) {
           
// TODO Auto-generated catch block
            e.printStackTrace();
        }
catch (SftpException e) {
           
// TODO Auto-generated catch block
            e.printStackTrace();
        }
       
    }
   
/**
     * create Directory
     *
@param filepath
     *
@param sftp
    
*/
   
private void createDir(String filepath, ChannelSftp sftp){
       
boolean bcreated = false;
       
boolean bparent = false;
        File file
= new File(filepath);
        String ppath
= file.getParent();
       
try {
           
this.sftp.cd(ppath);
            bparent
= true;
        }
catch (SftpException e1) {
            bparent
= false;
        }
       
try {
           
if(bparent){
               
try {
                   
this.sftp.cd(filepath);
                    bcreated
= true;
                }
catch (Exception e) {
                    bcreated
= false;
                }
               
if(!bcreated){
                   
this.sftp.mkdir(filepath);
                    bcreated
= true;
                }
               
return;
            }
else{
                createDir(ppath,sftp);
               
this.sftp.cd(ppath);
               
this.sftp.mkdir(filepath);
            }
        }
catch (SftpException e) {
            System.out.println(
"mkdir failed :" + filepath);
            e.printStackTrace();
        }
       
       
try {
           
this.sftp.cd(filepath);
        }
catch (SftpException e) {
            e.printStackTrace();
            System.out.println(
"can not cd into :" + filepath);
        }
       
    }
   
/**
     * get all the files need to be upload or download
     *
@param file
     *
@return
    
*/
   
private List<String> getFileEntryList(String file){
        ArrayList
<String> fileList = new ArrayList<String>();
        InputStream in
= null;
       
try {
           
            in
= new FileInputStream(file);
            InputStreamReader inreader
= new InputStreamReader(in);
           
            LineNumberReader linreader
= new LineNumberReader(inreader);
            String filepath
= linreader.readLine();
           
while(filepath != null){
                fileList.add(filepath);
                filepath
= linreader.readLine();
            }
            in.close();
        }
catch (FileNotFoundException e) {
           
// TODO Auto-generated catch block
            e.printStackTrace();
        }
catch (IOException e) {
           
// TODO Auto-generated catch block
            e.printStackTrace();
        }
finally{
           
if(in != null){
                in
= null;
            }
        }

       
return fileList;
    }

   
/**
     *
@return the host
    
*/
   
public String getHost() {
       
return host;
    }

   
/**
     *
@param host the host to set
    
*/
   
public void setHost(String host) {
       
this.host = host;
    }

   
/**
     *
@return the username
    
*/
   
public String getUsername() {
       
return username;
    }

   
/**
     *
@param username the username to set
    
*/
   
public void setUsername(String username) {
       
this.username = username;
    }

   
/**
     *
@return the password
    
*/
   
public String getPassword() {
       
return password;
    }

   
/**
     *
@param password the password to set
    
*/
   
public void setPassword(String password) {
       
this.password = password;
    }

   
/**
     *
@return the port
    
*/
   
public int getPort() {
       
return port;
    }

   
/**
     *
@param port the port to set
    
*/
   
public void setPort(int port) {
       
this.port = port;
    }

   
/**
     *
@return the sftp
    
*/
   
public ChannelSftp getSftp() {
       
return sftp;
    }

   
/**
     *
@param sftp the sftp to set
    
*/
   
public void setSftp(ChannelSftp sftp) {
       
this.sftp = sftp;
    }

   
/**
     *
@return the localPath
    
*/
   
public String getLocalPath() {
       
return localPath;
    }

   
/**
     *
@param localPath the localPath to set
    
*/
   
public void setLocalPath(String localPath) {
       
this.localPath = localPath;
    }

   
/**
     *
@return the remotePath
    
*/
   
public String getRemotePath() {
       
return remotePath;
    }

   
/**
     *
@param remotePath the remotePath to set
    
*/
   
public void setRemotePath(String remotePath) {
       
this.remotePath = remotePath;
    }

   
/**
     *
@return the fileListPath
    
*/
   
public String getFileListPath() {
       
return fileListPath;
    }

   
/**
     *
@param fileListPath the fileListPath to set
    
*/
   
public void setFileListPath(String fileListPath) {
       
this.fileListPath = fileListPath;
    }
   
   
public static void main(String[] args) {
       
// TODO Auto-generated method stub
        FtpImpl ftp= new FtpImpl();
        ftp.connect();
        ftp.upload();
        ftp.disconnect();
        System.exit(
0);
    }


}

总结三种Shell脚本编程中避免SFTP输入密码的方法

最近编程中用到sftp上传文件,且需要用crontab预设定时上传事件。而sftp不同于ftp,没有提供选项如 -i 可以将密码直接编码进程序。使用sftp指令,会自动请求用户输入密码。 总结一...
  • w13770269691
  • w13770269691
  • 2014年06月04日 21:47
  • 35651

ftp与sftp连接实例

1.ftp连接方式 import java.io.IOException; import org.apache.commons.net.ftp.FTPClient; public class T...
  • u010009900
  • u010009900
  • 2015年10月09日 22:29
  • 4655

传输工具sftp使用详解

1 sftp简介     SFTP是Secure File Transfer Protocol的缩写,安全文件传送协议,它是一个交互式文件传输程式。它类似于 ftp, 但它进行加密传输,比FTP有更高...
  • JesseYoung
  • JesseYoung
  • 2015年01月08日 13:48
  • 15016

sftp在脚本中如何时使用(不用输入密码)

实现过程: 主要步骤如下: 1.为运行shell脚本的本地用户生成密钥对 2.将其中的公钥分发到sftp欲登录的远程服务器上 3.编写并以上面的本地用户运行shell脚本 一.生...
  • skylinethj
  • skylinethj
  • 2013年12月05日 15:13
  • 10860

java 代码链接SFTP,上传下载

依赖jar包: com.jcraft jsch 0.1.53 import java.io.File; import java.io.FileInputStream; imp...
  • hfmbook
  • hfmbook
  • 2016年07月21日 16:41
  • 2133

JAVA代码实现SFTP文件下载

JAVA代码实现SFTP文件下载
  • smallerpig
  • smallerpig
  • 2016年03月24日 23:37
  • 11530

FTP,SFTP,FTPS区别

一、FTP(文件传输协议)FTP全称是File Transfer Protocol。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有...
  • shmilychan
  • shmilychan
  • 2016年07月07日 10:02
  • 15847

linux搭建sftp服务器

最近工作需要用到sftp服务器,被网上各种方法尤其是权限设置问题搞得晕头转向,现在将自己搭建过程总结了一下,整理出来一种最简单的方法可供大家参考。 第1步,创建组:groupadd sftpgroup...
  • superswordsman
  • superswordsman
  • 2015年10月22日 11:47
  • 8624

FTP和SFTP的区别

文件传送协议FTP(File Transfer Protocol)是TCP/IP协议簇中的一个成员,也是现在因特网上最广泛的文件传送协议。FTP协议包括两个部分,一个是FTP客户端,另一个是FTP服务...
  • zhanghao143lina
  • zhanghao143lina
  • 2016年11月02日 09:14
  • 10345

sftp文件传输

1.      先到配置表mgw_communication 查看文件获取方式是Local、ftp、sftp的 2.      如果是SFTP的话用sftp NAME@URL,然后根据提示输入密码,进...
  • singit
  • singit
  • 2016年11月28日 19:59
  • 1832
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sftp
举报原因:
原因补充:

(最多只允许输入30个字)