我正在尝试从servlet访问资源文件但是获取 HTTP错误500 - 访问被拒绝:
File file = new File("//warChildFolder//myFile.txt");
InputStream is = new FileInputStream(file); // <--error on this line
我在google-app-engine上。
任何帮助表示赞赏!
答案 0 :(得分:3)
Google App Engine文档谈论“白名单”文件。这是在玩吗?
我也很想知道这个:
File file = new File("//warChildFolder//myFile.txt");
前导斜线不能使它成为绝对路径吗?
我会这样试试:
File file = new File("WEB-INF/warChildFolder/myFile.txt");
制作相对于WAR根目录的路径,并明确说明WEB-INF。
答案 1 :(得分:3)
我不确定Google App Engine,但根据我的经验,跨容器和平台的唯一解决方案是使用ServletContext.getRealPath()。
new File(servletContext.getRealPath("/WEB-INF/warChildFolder/myFile.txt"));
规范说:使用正斜杠和一个前导斜杠。这为您提供了平台独立性,并且您不依赖于进程的当前目录。
答案 2 :(得分:1)
如果使用单路径分隔符,它是否有效?
(更新为使用相对路径):
File file = new File("warChildFolder/myFile.txt");
你需要转义字符串中的“\”字符,所以使用“\”,但只需要一个“/”。
更新:可能是正在处理的路径与您预期的路径不同,您可以尝试记录文件的绝对路径(使用file.getAbsolutePath())来检查它。
要检查的另一件事是该进程对文件夹/文件具有读取权限。如果你不在Windows上,这可能是一个问题。