Ftp InputStreamReader在for循环的第二次迭代中抛出NPE
当我在for循环的第二次迭代中执行此代码时,InputStreamReader抛出一个NPE,如下所示。该代码在第一次迭代中运行良好,并在第二次迭代中返回以下NPE。我使用代码片段从FTP位置读取特定文件的内容并显示它们。请注意所有行,直到新的InputStreamReader即使在第二次迭代中也能完美工作。你知道为什么吗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>
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声明,要完成文件传输,必须调用并检查其返回值以验证成功。更正此问题后,一切正常