java.security.AccessControlException:访问被拒绝(java.io.FilePermission 文件读取)
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/11648806/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
java.security.AccessControlException: access denied (java.io.FilePermission file read)
提问by happy
Below code prompts for the input box for the file name and location.
When I enter file://C:/test/abc.tiff
then I am getting
下面的代码提示输入文件名和位置的输入框。当我进入file://C:/test/abc.tiff
然后我得到
java.security.AccessControlException: access denied (java.io.FilePermission \c\test\abc.tiff read)
Code Snippet
代码片段
CMBDocument document = evt.getDocument();
String docSaveFileName = (String) docToURL.get(document);
System.out.println("docSaveFileName :"+docSaveFileName);
docSaveFileName = docSaveFileName.replaceAll("servlet", "annotate");
System.out.println("modified docSaveFileName :"+docSaveFileName);
File tempFile = null;
try {
if (evt.getSaveAsNew() || document.isModified()) {
if (evt.getSaveAsNew()) {
docSaveFileName =
JOptionPane.showInputDialog(myGenDocViewer,
"Enter the name of the file to save the document:");
}
if (docSaveFileName == null) { // user cancelled
return;
}
currStreamingDocServices.setPreferredFormats(
new String[] { document.getMimeType()});
if (document.getCanWrite()) {
URL url = new URL(docSaveFileName);
OutputStream out = null;
String protocol = url.getProtocol();
String host = url.getHost();
// Use FileOutputStream if this URI is for a local file.
if (protocol.equals("file")
&& (host == null || host.length() == 0 || host.equals("localhost"))) {
out = new FileOutputStream(new File(url.getPath()));
}
else {
URLConnection urlCon = url.openConnection();
urlCon.setDoInput(false);
urlCon.setDoOutput(true);
urlCon.setUseCaches(false); // Enable tunneling.
if (urlCon instanceof HttpURLConnection) {
HttpURLConnection httpCon = (HttpURLConnection) urlCon;
httpCon.setRequestMethod("PUT");
}
urlCon.setRequestProperty("Content-type",document.getWriteMimeType());
out = urlCon.getOutputStream();
}
document.write(out);
out.close();
document.setModified(false);
document.setNew(false);
myGenDocViewer.setDocName(document, docSaveFileName);
采纳答案by Kurt Du Bois
What sort of application are you using this code from? If it's an applet, you're touching a sandboxing problem: applets cannot read or write files on the file system.
您从哪种应用程序中使用此代码?如果它是一个小程序,你就遇到了一个沙盒问题:小程序不能在文件系统上读取或写入文件。
回答by Andrew Thompson
Can I do this without signing jar file?
我可以在不签署 jar 文件的情况下执行此操作吗?
Sure thing. The plug-in 2 JRE allows us to access the local file-system from a sand-boxed applet, using the JNLP API services. Here is a demo. of the file services.
肯定的事。插件 2 JRE 允许我们使用 JNLP API 服务从沙盒小程序访问本地文件系统。这是一个演示。的文件服务。
That demo. is of a free-floating application, but for the same in an applet (without source code), see GIFanim.
那个演示。是一个自由浮动的应用程序,但对于小程序中的相同应用程序(没有源代码),请参阅GIFanim。