Вход в FTP-сервер, требующий SSL в Java [дубликат]

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

Например, ниже - класс ученика, который будет использовать его в нашем коде.

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
18
задан Martin Prikryl 12 January 2015 в 14:04
поделиться

5 ответов

Вы можете использовать org.apache.commons.net.ftp.FTPSClient вместо org.apache.commons.net.ftp.FTPClient для обеспечения безопасности ftp http://commons.apache.org/proper/commons -сетью / apidocs / орг / апач / Обще / сеть / FTP / FTPSClient.html

16
ответ дан user1464713 18 August 2018 в 20:37
поделиться

Apache FTPClient не поддерживает SFTP на данный момент. Тем не менее, вы можете использовать JSch-Java Secure Channel.

Onkar Joshi более подробно описывает библиотеку, используемую для FTP, SFTP, передачи файлов FTPS в Java.

Пример использования JSch для передачи файлов с SFTP выглядит следующим образом:

    ...

private static final Logger logger = Logger.getLogger(YourClass.class.getName());

public boolean sendDataViaSFTP(String contents) throws Exception {
    String hostname = "<FTP hostname/IP>";
    String username = "<FTP username>";
    String password = "<FTP password>";
    String remoteDirectory = "<FTP remote directory>";
    int ftpPort = 22;

    logger.info("***   Creating FTP 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(username, hostname, ftpPort);
        logger.info("***   FTP Session created.   ***");
        session.setPassword(password);

        //Security.addProvider(new com.sun.crypto.provider.SunJCE());
        //Setup Strict HostKeyChecking to no so we dont get the
        //unknown host key exception
        Properties config = new Properties();
        config.put("StrictHostKeyChecking", "no");
        session.setConfig(config);
        session.connect();
        logger.info("***   Session connected.   ***");

        //Open the SFTP channel
        logger.info("***   Opening FTP Channel.   ***");
        channel = session.openChannel("sftp");
        channel.connect();
        c = (ChannelSftp) channel;

        //Change to the remote directory
        logger.info("***   Changing to FTP remote dir: " + remoteDirectory + "   ***");
        c.cd(remoteDirectory);

        //Send the file we generated
        try {
            String filename = "myfile.txt";

            logger.info("***   Storing file as remote filename: " + filename + "   ***");

            ByteArrayInputStream bis = new ByteArrayInputStream(contents.getBytes());
            c.put(bis, filename);
            return true;
        } catch (Exception e) {
            logger.info("***   Storing remote file failed. " + e.toString() + "   ***");
            throw e;
        }
    } catch (Exception e) {
        logger.info("***   Unable to connect to FTP server. " + e.toString() + "   ***");
        throw e;
    } finally {
        //
        //Disconnect from the FTP server
        //
        try {
            if(session != null)
                session.disconnect();

            if(channel != null)
                channel.disconnect();

            if(c != null)
                c.quit();
        } catch (Exception exc) {
            logger.severe("***   Unable to disconnect from FTP server. " + exc.toString()+"   ***");
        }

        logger.info("***   SFTP Process Complete.   ***");
    }

}

...
3
ответ дан Babatunde Adeyemi 18 August 2018 в 20:37
поделиться
  • 1
    Для этого есть веская причина; SFTP - это нечто совершенно отличное от FTP. Это в значительной степени сделка с Java не Javascript :) – Gimby 28 February 2014 в 17:13
  • 2
    Однако проект Apache Commons Net, который создает FTPClient, поддерживает SFTP. – BrianC 17 March 2014 в 20:59

Во-первых, убедитесь, что вы понимаете разницу между FTPS (Secure FTP) и SFTP: FTPS против SFTP и SCP

Если вам нужен FTPS (Secure FTP), вы можете используйте FTPSClient вместо FTPClient из библиотеки Apache Commons: https://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/ftp/FTPSClient.html

Если вам нужен SFTP, см.: Как получить файл с сервера через SFTP? Библиотека SFTP-передачи Java

21
ответ дан Community 18 August 2018 в 20:37
поделиться

Попробуйте Java Secure Channel

Он поддерживает SFTP

http://www.jcraft.com/jsch/

Пример можно найти здесь здесь

3
ответ дан crunchBar 18 August 2018 в 20:37
поделиться

Как насчет попытки Apache Camel,

http://camel.apache.org/ftp2.html

2
ответ дан ymnk 18 August 2018 в 20:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: