下面的代码提示输入框中的文件名和位置。
当我输入file://C:/test/abc.tiff
时,我正在
java.security.AccessControlException: access denied (java.io.FilePermission \\c\test\abc.tiff read)
代码段
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);
答案 0 :(得分:2)
我可以不签署jar文件吗?
当然可以。插件2 JRE允许我们使用JNLP API服务从沙盒applet访问本地文件系统。这是一个demo. of the file services。
那个演示。是一个自由浮动的应用程序,但对于applet中的相同(没有源代码),请参阅GIFanim。
答案 1 :(得分:1)
您使用此代码的应用程序是什么类型的?如果它是一个applet,你就会触及沙盒问题:applet无法读取或写入文件系统上的文件。