在目录中创建文件时访问被拒绝

问题描述

我在远程共享网络文件夹中创建文件时遇到一个奇怪的问题。

用例:

  1. 我的开发环境位于某个本地虚拟机中。
  2. 应用程序计算一些数据。在特定路径下创建并保存一个 xml 文件。 (例如:C:/ProgramData/MyApp/exp/heregoestofile.txt)。
  3. 您可以指定文件位置。因此,它可以是 VM 中的本地文件夹,也可以是远程共享网络文件夹。

问题: 当我在本地机器上运行应用程序时,如果我在本地 VM 中指定文件位置并且创建 xml 文件没有任何问题,则一切正常。但是我的问题是,在我的应用程序中,我可以选择指定文件的创建位置。因此,对于我的用例,必须在某个共享的远程网络目录中创建文件。当我尝试创建文件时,出现以下异常:

INFO|4288/0|Service Ricoh ERS|21-02-08 10:42:36|directory is created: \\Win-ris3devae1\hfshare\ERS01[2021-02-08 10-42-35-000]
INFO|4288/0|Service Ricoh ERS|21-02-08 10:42:36|some directory is about to be created: \\Win-ris3devae1\hfshare\ERS01[2021-02-08 10-42-35-000]
INFO|4288/0|Service Ricoh ERS|21-02-08 10:42:36|[org.subethamail.smtp.server.Session-/0:0:0:0:0:0:0:1:49945] ERROR com.ricoh.sdced.ers.xmlparser.XMLParser - An exception occured in writeXMLDocumentToFile method: 
INFO|4288/0|Service Ricoh ERS|21-02-08 10:42:36|directory is created: \\Win-ris3devae1\hfshare\ERS01[2021-02-08 10-42-35-000]
INFO|4288/0|Service Ricoh ERS|21-02-08 10:42:36|java.io.IOException: Access is denied
INFO|4288/0|Service Ricoh ERS|21-02-08 10:42:36|till here it comes without any problem
INFO|4288/0|Service Ricoh ERS|21-02-08 10:42:36|    at java.io.WinNTFileSystem.createFileExclusively(Native Method)
INFO|4288/0|Service Ricoh ERS|21-02-08 10:42:36|creating a new file with path: \\Win-ris3devae1\hfshare\ERS01[2021-02-08 10-42-35-000]\index.xml
INFO|4288/0|Service Ricoh ERS|21-02-08 10:42:36|    at java.io.File.createNewFile(File.java:1014)
INFO|4288/0|Service Ricoh ERS|21-02-08 10:42:36|    at com.ricoh.sdced.ers.xmlparser.XMLParser.writeXMLDocumentToFile(XMLParser.java:90)
INFO|4288/0|Service Ricoh ERS|21-02-08 10:42:36|    at com.ricoh.sdced.ers.server.MailHandler.saveMetadataToFolder(MailHandler.java:58)
INFO|4288/0|Service Ricoh ERS|21-02-08 10:42:36|    at com.ricoh.sdced.ers.server.MailHandler.saveMailToFolder(MailHandler.java:47)
INFO|4288/0|Service Ricoh ERS|21-02-08 10:42:36|    at com.ricoh.sdced.ers.server.MailHandlerFactory$Handler.data(MailHandlerFactory.java:65)
INFO|4288/0|Service Ricoh ERS|21-02-08 10:42:36|    at org.subethamail.smtp.internal.command.DataCommand.execute(DataCommand.java:58)
INFO|4288/0|Service Ricoh ERS|21-02-08 10:42:36|    at org.subethamail.smtp.internal.server.RequireTLSCommandWrapper.execute(RequireTLSCommandWrapper.java:32)
INFO|4288/0|Service Ricoh ERS|21-02-08 10:42:36|    at org.subethamail.smtp.internal.server.RequireAuthCommandWrapper.execute(RequireAuthCommandWrapper.java:35)
INFO|4288/0|Service Ricoh ERS|21-02-08 10:42:36|    at org.subethamail.smtp.internal.server.CommandHandler.handleCommand(CommandHandler.java:86)
INFO|4288/0|Service Ricoh ERS|21-02-08 10:42:36|    at org.subethamail.smtp.server.Session.runcommandLoop(Session.java:233)
INFO|4288/0|Service Ricoh ERS|21-02-08 10:42:36|    at org.subethamail.smtp.server.Session.run(Session.java:147)
INFO|4288/0|Service Ricoh ERS|21-02-08 10:42:36|    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
INFO|4288/0|Service Ricoh ERS|21-02-08 10:42:36|    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
INFO|4288/0|Service Ricoh ERS|21-02-08 10:42:36|    at java.lang.Thread.run(Thread.java:748)

我用来创建文件代码是这样的:

public void writeXMLDocumentToFile(String folderPath) {
        try (FileOutputStream stream = new FileOutputStream(folderPath + XML_FILE_NAME)) {
            TransformerFactory tFactory = TransformerFactory.newInstance();
            Transformer transformer = tFactory.newTransformer();
            transformer.setoutputProperty(OutputKeys.INDENT,YES);
            transformer.setoutputProperty(XSLT_INDENT_AMOUNT_STRING,INDENTATION_AMOUNT);
            Source s = new DOMSource(this.document);
            Result res = new StreamResult(stream);
            transformer.transform(s,res);
        } catch (TransformerException | IOException e) {
            logger.error(EXCEPTION_IN_WRITEXMLDOCUMENTTOFILE_METHOD,e);
        }
    }

注意:您可以说我可能没有对该远程共享文件夹进行读写的权限。我已经给了它,但不幸的是情况并非如此。我做了以下测试:

  1. 我的开发环境在虚拟机中。
  2. 我在我的开发 VM 中打开命令行并执行类似 echo hello >> \someaddress\myapplication\hello.txt 的操作,并且它的创建一切正常。这意味着在我的 vm 中打开了远程文件夹以进行写读取访问。

所以这意味着我没有任何网络权限问题,因为我已经可以使用命令行在此 VM 内的远程共享网络文件夹中创建文件

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)