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

时间:2011-02-09 11:16:37

标签: java io networkstream

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

许可被拒绝 java.io.IOException:权限被拒绝         at java.io.UnixFileSystem.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)); 

提前感谢您的回答

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

如果您正在使用与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,它可以使用

答案 2 :(得分:2)

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

祝你好运!