2013-11-26 132 views
1

我有一个运行tomcat7的java web应用程序。我有一个呈现图像的servlet。我正在尝试使用File class。然而,它会返回false当我打电话存在()像这样文件路径不加载

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

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

我已经硬编码的目录到代码,以确保它实际上是一个指向文件。我正在使用“/ 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 
+0

你为什么使用'URLDecoder.decode()'? –

+0

阅读完javadoc后。我不需要它。我会拿出来运行它。我不会认为它会导致问题。但是,我们将看到 – Sixthpoint

+0

如果您使用绝对路径('/ usr/share/tomcat7/webapps/files/images /'),那么您没有使用当前目录('user.dir')。当前目录仅用于相对路径。 – Boann

回答

0

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