我有一个运行Tomcat7的Java Web应用程序。我有一个渲染图像的servlet。我正在尝试使用File class。但是,当我像这样调用exist()时,它将返回false

imageFile = new File(filesDir + "images/", id + "_" + size + "." + file_extension);

// Check if file actually exists in filesystem.
if (!imageFile.exists()) {
   // render 404
}


我已经将dir硬编码到代码中,以确保它实际上指向文件。我正在使用“ / usr / share / tomcat7 / webapps / files / images /”目录。阅读文件类的文档后,它指出:

“此目录由系统属性user.dir命名,通常是在其中调用Java虚拟机的目录”。

如何授予Java加载此类目录的权限?还是我应该放置文件的目录更好?

Edit "ps -ef | grep tomcat"

tomcat   16099     1  0 Nov22 ?        00:07:03 /usr/lib/jvm/jre/bin/java -classpath /usr/share/tomcat7/bin/bootstrap.jar:/usr/share/tomcat7/bin/tomcat-juli.jar:/usr/share/java/commons-daemon.jar -Dcatalina.base=/usr/share/tomcat7 -Dcatalina.home=/usr/share/tomcat7 -Djava.endorsed.dirs= -Djava.io.tmpdir=/var/cache/tomcat7/temp -Djava.util.logging.config.file=/usr/share/tomcat7/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager org.apache.catalina.startup.Bootstrap start
root     18217 18179  0 18:00 pts/0    00:00:00 vi /usr/share/tomcat7/logs/catalina.out
root     18376 18364  0 18:11 pts/2    00:00:00 grep tomcat
root     22805     1  0 Sep10 ?        02:22:53 /opt/jasperreports-server-cp-5.2.0/java/bin/java -Djava.util.logging.config.file=/opt/jasperreports-server-cp-5.2.0/apache-tomcat/conf/logging.properties -Xms1024m -Xmx2048m -XX:PermSize=32m -XX:MaxPermSize=512m -Xss2m -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/opt/jasperreports-server-cp-5.2.0/apache-tomcat/endorsed -classpath /opt/jasperreports-server-cp-5.2.0/apache-tomcat/bin/bootstrap.jar -Dcatalina.base=/opt/jasperreports-server-cp-5.2.0/apache-tomcat -Dcatalina.home=/opt/jasperreports-server-cp-5.2.0/apache-tomcat -Djava.io.tmpdir=/opt/jasperreports-server-cp-5.2.0/apache-tomcat/temp org.apache.catalina.startup.Bootstrap start

最佳答案

问题是@gmansoor提到了什么。 Tomcat服务器没有访问目录的权限。我将文件移动到“ / var / lib / tomcat7 / webapps / files /”。在catalina.properties文件中指定了webapps文件夹。之后,我将文件目录更改为chmod 777,该目录允许java打开文件。

10-07 19:08
查看更多