我有一个静态XML文件在我的应用程序引擎应用程序,上传只是很好,我试图读取它的一些基于规则的执行逻辑,但下面的错误是扔给我:
Caused by: java.security.AccessControlException: access denied (java.io.FilePermission /war/WEB-INF/StaticContent.xml read)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:393)
at java.security.AccessController.checkPermission(AccessController.java:553)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerFactory.java:166)
at java.lang.SecurityManager.checkRead(SecurityManager.java:888)
at java.io.FileInputStream.<init>(FileInputStream.java:130)
at java.io.FileInputStream.<init>(FileInputStream.java:96)
我尝试将文件直接放在war和war/WEB-INF
目录中,问题仍然存在。服务器尝试读取文件的操作如下所示:
final FileInputStream fis = new FileInputStream("/war/WEB-INF/StaticContent.xml");
根据这篇文章,我做的一切都是正确的:http://code.google.com/appengine/kb/java.html readfile
使用getResourceAsStream代替直接打开FileInputStream。
你在FileInputStream中指定的位置被作为绝对位置,这就是为什么你得到访问被拒绝的异常。
ServletContext context = getServletContext();
InputStream is = context.getResourceAsStream("/WEB-INF/StaticContent.xml");
您是否尝试从war/WEB-INF/StaticContent.xml
而不是/war/WEB-INF/StaticContent.xml
读取?可能后者被解释为绝对路径,而实际上您不知道绝对路径是什么,因此需要一个相对路径。
如果您的文件存储在war Directory中,则无需在filepath中指定项目名称即可访问该文件:
项目战争——sample.json
- FileReader fr=new FileReader("war/sample.json");:)
我发现下面的方法对我很有效:
InputStream feedStream = new FileInputStream("WEB-INF/" + fileName);