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

Ftp InputStreamReader在for循环的第二次迭代中抛出NPE,ftp,nullpointerexception,inputstreamreader,Ftp,Nullpointerexception,Inputstreamreader,当我在for循环的第二次迭代中执行此代码时,InputStreamReader抛出一个NPE,如下所示。该代码在第一次迭代中运行良好,并在第二次迭代中返回以下NPE。我使用代码片段从FTP位置读取特定文件的内容并显示它们。请注意所有行,直到新的InputStreamReader即使在第二次迭代中也能完美工作。你知道为什么吗 Exception in thread "main" java.lang.NullPointerException at java.io.Reader.<init>

当我在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)
线程“main”java.lang.NullPointerException中的异常 在java.io.Reader上。(Reader.java:61) 在java.io.InputStreamReader。(InputStreamReader.java:55) 位于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);
                    }

                }
            }
        }
publicstaticvoidmain(字符串[]args){
字符串strDate=“20130805”;
FTPClient FTPClient=新的FTPClient();
试一试{
ftpClient.connect(主机);
字符串pathToFiles=“/path/to/File”;
字符串ftpFileName=“”;
列表ftpFileNames=null;
输入流是流;
if(ftpClient.login(用户名、密码)){
ftpClient.enterLocalPassiveMode();
FTPFile[]ftpFiles=ftpClient.listFiles();
ftpFileNames=新的ArrayList();
用于(FTPFile FTPFile:ftpFiles){
ftpFileName=ftpFile.getName();
if(ftpFileName.contains(strDate)){
iStream=ftpClient.retrieveFileStream(路径文件+ftpFileName);
System.out.println(ftpClient.getReplyString());
InputStreamReader isr=新的InputStreamReader(iStream);//第二次迭代时此行出错
BufferedReader br=新的BufferedReader(isr);
字符串行=”;
而((line=br.readLine())!=null){
系统输出打印项次(行);
}
}
}
}

经过大量调试后解决了问题。我没有在传输文件后调用completePendingCommand()来检查传输状态

的API声明,要完成文件传输,必须调用并检查其返回值以验证成功。更正此问题后,一切正常