исключение нулевого указателя - PullRequest
0 голосов
/ 17 мая 2011

У меня есть код для загрузки файла на сервер.

import org.apache.commons.net.ftp.FTPClient;

    import java.io.File;
    import java.io.IOException;
    import org.apache.commons.net.ftp.FTPFile;
    import java.io.FileInputStream;
    import java.net.SocketException;

    public class FtpConnectDemo {
        public static void main(String[] args) throws SocketException, IOException{
            FTPClient client = new FTPClient();
            FileInputStream fis = null;

            client.connect("ftp.someserver.co.uk",21);
            boolean login = client.login("webmaster@someserver.co.uk",
                    "mypassword");


            String filename = "E:/workbench j2ee/cPEP_UI/WebContent/engine.xml";
            client.storeFile(filename, fis);
            client.logout();
            fis.close();
        }
    }

и когда я запускаю этот код, он выдает мне эту ошибку:

Exception in thread "main" java.lang.NullPointerException
    at FtpConnectDemo.main(FtpConnectDemo.java:22)

Имя пользователя, пароль, имя сервера в порядке. Что тогда не так? Я могу подключиться к FTP с помощью telnet. Есть идеи?

РЕДАКТИРОВАТЬ 1

ОК, теперь я не получаю исключение nullpointer, поскольку я инициализировал fis. Но мой файл еще не загружен; в чем может быть проблема?

Ответы [ 4 ]

6 голосов
/ 17 мая 2011

Вы никогда не создаете свою переменную fis. Я думаю, что это ваша проблема здесь.

Это вызывает две проблемы:

  • Вы пытаетесь сохранить null как файл, строка 20. Это обрабатывается используемой вами библиотекой Apache FTP.
  • NullPointerException строка 22, когда вы пытаетесь позвонить close().

Кроме того, я хотел бы отметить еще одну вещь: строка 20, когда вы звоните storeFile. Путь, который вы указываете, - это путь, указывающий на локальный файл. Я думаю, вы должны указать здесь путь к удаленному файлу.

Окончательный код должен выглядеть следующим образом:

// ...

FileInputStream fis = new FileInputStream("E:/workbench j2ee/cPEP_UI/WebContent/engine.xml");

// ...

client.storeFile("engine.xml", fis);

// ...
1 голос
/ 17 мая 2011

вы пропали без вести

fis = new FileInputStream(new File(filename));

до client.storeFile()

0 голосов
/ 17 мая 2011

Метод sendFile на client.storeFile возвращает логическое значение. Сначала я проверил бы это значение, чтобы убедиться, что оно не работает или, возможно, просто импортируется в то место, которое вы не ожидаете.

У клиента также есть методы getReplyCode и getReplyString , которые вы можете использовать, чтобы узнать, на что способен сервер.

0 голосов
/ 17 мая 2011

Похоже, ваш fis не может быть ничем иным, кроме null (вы инициализируете его только с null), поэтому NullPointerException является естественным, когда вы пытаетесь выполнить close() для него.

...