java - 访问文件夹中的文件时出现 NullPointerException
问题描述
我正在尝试列出文件夹中的文件,但它会产生空指针异常这是代码
String url=req.getRequestURI();
String path=session.getServletContext().getRealPath(url);
File folder = new File(path);
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {//this line is producing nullpointer exception
if (listOfFiles[i].isFile()) {
System.out.println("File " + listOfFiles[i].getName());
} else if (listOfFiles[i].isDirectory()) {
System.out.println("Directory " + listOfFiles[i].getName());
}
}
当我打印路径时,它会给出正确的路径:like D:\apache-tomcat-8.5.24\webapps\JaasLogin\JaasLogin\user-files
. 我是 java 上下文路径的新手:/jaasLogin 但是当我直接给出路径时, "D:\\apache-tomcat-8.5.24\\webapps\\JaasLogin\\JaasLogin\\user-files"
它会起作用
我得到的输出
org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [userfileserv] in context with path [/JaasLogin] threw exception
java.lang.NullPointerException
at myPackage.UserFileServ.doGet(UserFileServ.java:31)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
解决方案
正如File.listFiles()的 Javadoc所述:
如果此抽象路径名不表示目录,或者发生 I/O 错误,则返回 null。
所以为了防止NPE做这样的事情:
File[] listOfFiles = folder.listFiles();
if (listOfFiles != null) {
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
System.out.println("File " + listOfFiles[i].getName());
} else if (listOfFiles[i].isDirectory()) {
System.out.println("Directory " + listOfFiles[i].getName());
}
}
}
else {
System.out.println("Could not read " + folder.getName());
}
推荐阅读
- javascript - 我想在 REACT 中使用单击事件处理程序调用一个类
- sql - 从列中提取值
- android - glGetAttribLocation 在我的一个属性上返回 -1
- ruby - 厨师/红宝石术语
- ios - 如何使用 7.3 将应用上传到应用商店
- c# - System.Web.HttpException:上传文件时超出最大请求长度> 3MB
- java - Scala-maven-plugin 无法执行
- javascript - 在 while 循环中使用 await 是一种不好的做法吗
- android - 浮动操作按钮未正确显示
- recursion - Prolog - 获取朋友的朋友列表