我有一个xslt文件存储在 项目/工具 文件夹中。 (我正在使用Netbeans IDE。)
我尝试在我的代码中访问此文件,但在运行时,我得到AccessControlException: access denied
。
代码是:
java.net.URI xsltURI = new java.net.URI(myUtil.getUri("xsltFile.xslt"));
Transformer transformer = factory.newTransformer(new StreamSource(new File(xsltURI)));
必须使用myUtil
实例来访问URI,原因不重要。我打印了它的输出,它正确地给出了文件的相对路径。
我试图用file:///
和file:///[fulldomain]
作为相对路径的前缀,但在每种情况下,它实际上都试图访问服务器上的硬盘,即使我没有给出驱动器名称。 (!)它试图访问 C:[relative-path] ,这甚至都不是文件的位置。
如果我省略file:///
,那么我会得到the URI is not absolute
,如果我只是提供该文件的完整网址,我会得到NullPointerException
。
非常感谢任何帮助。
更新:根据我的评论,我的代码类似于
java.net.URI xsltURI = new java.net.URI("https://host" + myB2U.getUri("xsltFile.xslt"));
java.net.URL xsltURL = xsltURI.toURL();
java.net.URLConnection myConnection = xsltURL.openConnection();
myConnection.connect(); //AccessControlException: access denied ("java.net.SocketPermission"...
java.io.InputStream xsltStream = myConnection.getInputStream();
Transformer transformer = factory.newTransformer(new StreamSource(xsltStream));
有什么明显的错误吗?
更新:已解决。只需添加一个权限。
答案 0 :(得分:0)
file:// protocol告诉Java使用文件访问来打开流。如果您不想访问文件,则应使用其他协议,例如http://。
如果您使用相对路径,则URI应类似于file://./My/Relative/Path。第3个斜杠意味着它相对于根。
答案 1 :(得分:0)
从我收集的内容来看,我应该用文件路径实例化一个URL
对象。从那里开始,我应该能够从URLConnection
初始化URL
。在我调用URL
的{{1}}方法后,我应该可以通过调用connect()
方法获得InputStream
。