1

下面的代码提示输入文件名和位置的输入框。当我进入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);
4

2 回答 2

2

我可以在不签署 jar 文件的情况下执行此操作吗?

肯定的事。插件 2 JRE 允许我们使用 JNLP API 服务从沙盒小程序访问本地文件系统。这是一个演示。的文件服务

那个演示。是一个自由浮动的应用程序,但在一个小程序(没有源代码)中相同,请参阅GIFanim

于 2012-07-25T12:21:06.413 回答
1

您使用的是哪种应用程序中的代码?如果它是一个小程序,那么您将遇到沙盒问题:小程序无法读取或写入文件系统上的文件。

于 2012-07-25T11:57:20.430 回答