将文件复制到SFTP服务器的Jsch示例

时间:2014-05-09 04:53:37

标签: java sftp jsch

以下是我的程序......但是在session.connect()

之后这不起作用
public static void main(String args[])
        {
        try {
            String ftpHost = "XXXXXXXX";
            int ftpPort = 21;     
            String ftpUserName = "XXXX";
            String ftpPassword = "XXXXX";
            String ftpRemoteDirectory = "/";
            String fileToTransmit = "C://XXXXX//Desktop//RG//10171699_821972117859158_5724612734096298046_n.jpg";          
            JSch.setLogger(new MyLogger());
            System.out.println("Creating session.");
            JSch jsch = new JSch();

            Session session = null;
            Channel channel = null;
            ChannelSftp c = null;

            //
            // Now connect and SFTP to the SFTP Server
            //
            try {
                // Create a session sending through our username and password
                session = jsch.getSession(ftpUserName, ftpHost, ftpPort);
                System.out.println("Session created.");
                session.setPassword(ftpPassword);

                java.util.Properties config = new java.util.Properties();
                config.put("StrictHostKeyChecking", "no");
                session.setConfig(config);
                System.out.println("Session connected before.");
                session.connect();
                System.out.println("Session connected.");

                System.out.println("OPEN SFTP CHANNEL");
                //
                // Open the SFTP channel
                //
                System.out.println("Opening Channel.");
                channel = session.openChannel("sftp");
                channel.connect();
                c = (ChannelSftp) channel;
                System.out.println("Now checing status");
            } catch (Exception e) {
                System.err.println("Unable to connect to FTP server."
                        + e.toString());
                throw e;
            }

            //
            // Change to the remote directory
            //
            System.out.println("Now performing operations");
            ftpRemoteDirectory="/home/pooja111/";
            System.out.println("Changing to FTP remote dir: "
                    + ftpRemoteDirectory);
            c.cd(ftpRemoteDirectory);

            //
            // Send the file we generated
            //
            try {
                File f = new File(fileToTransmit);
                System.out.println("Storing file as remote filename: "
                        + f.getName());
                c.put(new FileInputStream(f), f.getName());
            } catch (Exception e) {
                System.err
                        .println("Storing remote file failed." + e.toString());
                throw e;
            }   

            //
            // Disconnect from the FTP server
            //
            try {
                c.quit();
            } catch (Exception exc) {
                System.err.println("Unable to disconnect from FTPserver. "
                        + exc.toString());
            }

        } catch (Exception e) {
            System.err.println("Error: " + e.toString());
        }

        System.out.println("Process Complete.");
        System.exit(0);
    }

,输出

Creating session.
Session created.
Session connected before.
INFO: Connecting to ftp.olstr.com port 21
INFO: Connection established

我的代码控制在session.connect()行之后没有移动。

1 个答案:

答案 0 :(得分:5)

FTP,FTPS,SFTP,FTP等不同连接有不同的端口。使用适当的端口。这些是端口。 20 FTP数据(文件传输协议),21 FTP(文件传输协议),22 SSH(安全Shell)。 Use session.connect(timeout)。评论您的堆栈跟踪,以便我知道确切的错误是什么。尝试使用22并查看错误是否仍然存在。