在Google App Engine上读取静态XML文件



我有一个静态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);

最新更新