当我在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);
}
}
}
}
答案 0 :(得分:0)
经过大量调试后找出问题所在。在传输文件以检查传输状态后,我没有调用completePendingCommand()。
FTPClient.retrieveFileStream()
的API声明要完成文件传输,您必须调用FTPClient.completePendingCommand()
并检查其返回值以验证是否成功。纠正这个问题后,一切都开始正常。