InputStreamReader在for循环的第二次迭代时抛出NPE

时间:2013-08-14 06:06:06

标签: ftp nullpointerexception inputstreamreader

当我在for循环的第二次迭代中执行此代码时,InputStreamReader按如下方式抛出NPE。该代码适用于第一次迭代,并在第二次迭代时返回以下NPE。我正在使用代码片段从FTP位置读取特定文件的内容并显示它们。请注意所有行直到新的InputStreamReader在第二次迭代时都能正常工作。有什么想法吗?

Exception in thread "main" java.lang.NullPointerException
at java.io.Reader.<init>(Reader.java:61)
at java.io.InputStreamReader.<init>(InputStreamReader.java:55)
at com.test.txtweb.server.task.CallBackRetryTask.main(CallBackRetryTask.java:229)

以下是源代码:

public static void main(String[] args){
    String strDate = "20130805";

    FTPClient ftpClient = new FTPClient();

    try {
        ftpClient.connect(host);
        String pathToFiles = "/path/to/File";
        String ftpFileName = "";
        List<String> ftpFileNames = null;
        InputStream iStream;
        if(ftpClient.login(username, password)){
            ftpClient.enterLocalPassiveMode(); 
            FTPFile[] ftpFiles = ftpClient.listFiles();
            ftpFileNames = new ArrayList<String>();
            for (FTPFile ftpFile : ftpFiles) {
                ftpFileName = ftpFile.getName();
                if(ftpFileName.contains(strDate)){
                    iStream = ftpClient.retrieveFileStream(pathToFiles + ftpFileName);
                    System.out.println(ftpClient.getReplyString());

                    InputStreamReader isr = new InputStreamReader(iStream); //Error on this line on second iteration
                    BufferedReader br = new BufferedReader(isr);

                    String line = ""; 

                    while ((line = br.readLine()) != null) {
                        System.out.println(line);
                    }

                }
            }
        }

1 个答案:

答案 0 :(得分:0)

经过大量调试后找出问题所在。在传输文件以检查传输状态后,我没有调用completePendingCommand()。

FTPClient.retrieveFileStream()的API声明要完成文件传输,您必须调用FTPClient.completePendingCommand()并检查其返回值以验证是否成功。纠正这个问题后,一切都开始正常。