java.io.IOException:网络文件夹上的权限被拒绝

当我试图在一个安装在unix系统上的窗口文件夹上写一个文件时,我有post的标题错误。 我开发了一个在Linux操作系统上运行Tomcat 6的Web服务,需要在Windows网络文件夹上编写。 系统管理员已将其安装在Linux服务器上,并且在其上创建和修改文件没有问题。 当我尝试执行发布的代码时,我得到以下exception:

权限被拒绝java.io.IOException:在java.io.File.createFileExclusively(Native Method)java.io.File.createNewFile(File.java:850)上的权限被拒绝

奇怪的是,它似乎与网络文件夹上的File.createNewFile方法有关,实际上该服务可以在本地文件系统上编写而没有问题,无论是在调试(用于开发服务的pc)还是tomcat文件夹系统管理员在linux服务器上提供了我。 文件已创建但为空,并且不会打印create方法后面的日志条目。 此外,如果我使用普通的输出流来创建和写入文件我没有问题。

我在网上找不到关于例外的任何解释。 由于我对java不是很有经验,我想知道为什么我会收到这个错误。 我是以错误的方式使用它吗? 这是图书馆的错误吗? 我想错过传递一些参数吗? 如上所述,我使用普通的输出流解决了这个问题,这是一个提高我对java的理解的问题。

FileOutputStream fos = null; try{ log.info(String.format("file length: %s",streamAttach.length)); log.info(String.format("check File : %s",filename)); File f = new File(filename); if(f.exists()) ... boolean done= f.createNewFile();//here comes the exception //nothing of the following happens if(!done) throw new NWSException("error creating file"); log.info(String.format("file %s creato", nomeFile)); 

提前谢谢你的回答

我最近遇到了这个问题,发现java.io.File.createNewFile()实际上需要“更改权限”权限(您可以在检查文件夹权限时在Security-> Advanced下找到此条目)。 如果没有它,它将创建文件,然后抛出IOException。

它具有欺骗性,因为在手动测试时您仍然可以在文件夹上创建文件,但是如果没有此特定权限,createNewFile()仍然会失败(可能是因为它可以更改其创建的文件的权限)。

如果您正在使用与Unix共享NTFS(CIFS)样式文件系统的Netapp,您可能会体验到“不允许NFS更改NTFS样式安全卷中文件的权限”。 ( TR-3490第16页)

这里的选项是更改为unix文件系统,或者将cifs.ntfs_ignore_unix_security_ops标志设置为on,以便对文件系统进行quiches NFS权限错误。

java.io.UnixFileSystem.createFileExclusively(Native Method)打开带有O_EXCL和0666 umask的文件,所以我会得到一个EACCES ,它实际上是一个NFS3RR_ACCES

 open("/net/storage01-a/filer/myfile", O_RDWR|O_CREAT|O_EXCL, 0666) Err#13 EACCES 

您也可以使用OutputStream来创建文件,该文件不使用O_EXCL

它绝对不是Java特有的问题。 如果此Unix文件夹映射到您的Windows,请尝试打开文件资源管理器并在此目录中创建文件。 我相信你也会得到许可。 在这种情况下,请修复此问题或请求系统管理员为您提供帮助。

祝你好运!