2012-03-21 90 views
1

我试图检查文件是否可写与否。我已经为所有用户自己更改了文件权限。但如果我尝试运行该程序,它会显示“真实”作为响应。如果我允许权限,那么它也显示“真实”。File.canWrite不工作按预期

请告诉我是我的问题吗?

try 
    { 

    File file = new File("D:/myproject_log/delivery_report_edr.out"); 

     if(!file.canWrite()) 
     { 
      System.out.println("you can't write!!!"); 
     } 
     else 
      System.out.println("you can write!!!"); 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 
+2

你还没说你更改的权限*为* ... – 2012-03-21 14:11:51

+0

你正在做的事情错在你怎么认为你设置权限,您发布的代码应该按预期工作,如果权限设置是否正确。 – 2012-03-21 14:16:42

+0

谁是文件的所有者,谁在运行应用程序? – Woot4Moo 2012-03-21 14:36:30

回答

2

它工作正常。我复制了你的代码并运行了两次。首先我你可以写,然后右击该文件夹,进入属性,然后选择只读并再次运行该程序,我得到你不能写

所以按照文件的方法canWrite()它给了我预期的输出。请再次确认您的设置并检查。

+0

我在Windows操作系统中将权限更改为“拒绝”。与我正在尝试记录我的条目相同的文件。但同时使用相同的文件创建记录器,我得到异常说java.io.FileNotFoundException:d:\ myproject_log \ delivery_report_edr.out(访问被拒绝) – 2012-03-21 14:29:48

+0

@ user1282551你可以说你是如何改变的权限? – 2012-03-21 14:31:35

+0

在Windows中,右键单击该文件,然后进入属性......在安全选项卡中,我已通过单击“拒绝”选项更改了写入权限。这是正确的方式吗? – 2012-03-21 14:34:56

0

我也发现,File.canWrite()不能被信任,尤其是在网络驱动器上,即使文件写入失败或反之亦然,通常返回true。我做了我自己的方法,实际上试图写一个虚拟文件到目录。这是简单的写作和万无一失。也许他们修正了它。

0

我曾与位于下的文件相同的问题:\ PROGRAMFILES \文件夹和File.canWrite方法返回真的,我居然也得到了同样的异常。 当我更改写入的权限允许为在文件夹属性的安全选项卡中定义的USER为true时,它不给我例外。