我试图在安装在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));
提前感谢您的回答
答案 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,请尝试打开文件资源管理器并在此目录中创建文件。我相信你也会得到许可。在这种情况下,请修复此问题或请求系统管理员为您提供帮助。
祝你好运!