当我试图在安装在 unix 系统上的窗口文件夹上写入文件时,我遇到了帖子的标题错误。我开发了一个 web 服务,它在 linux 操作系统上的 Tomcat 6 中运行,需要在 windows 网络文件夹上写入。系统管理员已将其挂载到 Linux 服务器上,并且可以毫无问题地在其上创建和修改文件。 当我尝试执行发布的代码时,出现以下异常:
权限被拒绝 java.io.IOException:权限被拒绝 在 java.io.UnixFileSystem.createFileExclusively( native 方法) 在 java.io.File.createNewFile(File.java:850)
奇怪的是,它似乎与网络文件夹上的 File.createNewFile 方法有关,实际上该服务可以毫无问题地写入本地文件系统,无论是在调试时(我用来开发服务的电脑)系统管理员在 linux 服务器上为我提供了一个 tomcat 文件夹。该文件已创建但为空,并且不会打印 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() 实际上需要“Change Permissions”权限(您可以在检查文件夹权限时在 Security->Advanced 下找到此条目)。如果没有这个,它将创建文件,然后随后抛出 IOException。
这是具有欺骗性的,因为您仍然可以在手动测试时在文件夹上创建文件,但是如果没有此特定权限,createNewFile() 仍然会失败(大概是这样它可以更改文件的权限)创造)。
关于java.io.IOException : Permission denied on network folder 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4944114/