NTFS分区,文件(文件夹)设置用户权限为不可读取(或者不可写入)。
请问如何判断这个文件访问权限?
本意是判断一个文件路径file = new File(path);是否存在,和是否具有访问权限,来截获这个异常,代码如下:
catch (FileNotFoundExcepion e){
  //判断文件不存在
  if (!file.exist){
    System.out.println("File is not exist!");
  }
  //判断文件不可访问
  if (!file.???)){
    System.out.println("File is not exist!");
  }
}
找到方法file.canRead()和file.Write(),
但是测试了一下,file.canRead()等于true,明显不对
请问有其他方法判断这个访问权限吗?
手动更改这个文件的读取权限,如何识别这个属性?
还是要获取当前用户是否在文件可读权限列表里?
如果有好的方法,请予以解答,在此谢谢大家!

解决方案 »

  1.   

    如果你能够看得到那个文件,肯定是有一定访问权限的。如果文件属性设置为Read Only则file.canWrite()会返回false。如果把所有的权限都取消(注意选对当前用户),那么file.exist()也会返回false。关于是否有读取权限,我是这样看的,如果可以看得到文件,那你肯定有读取权限了,因为至少你能知道文件的名字和类型这两个文件属性。
      

  2.   

    File类不是有 canread canwrite ishidden,setreadonly这些方法吗?
    看看api和doc
      

  3.   

    感谢以上对我的帮助
    Re:1楼
    如果文件很大,这样即使读取一个字节,也是很耗时间的。况且我现在这个“文件无权限访问”,就是从FileNotFoundExcepion抛出的
    只是想分辨是文件不存在生成的异常(!File.exist(),已解决),还是文件无访问权限(这个是我的提问点),还是其他错误(FileNotFoundExcepion包含很多其他异常)。Re:2楼
    现在就是在看到文件的情况下,把文件属性中当前用户的“读”权限单独禁用,这样file.exist()是返回true的,但是file.canRead()和file.write()同样返回true。我的问题还是没有解决= ="Re:3楼
    那些方法,偶都试过了
      

  4.   

    不会吧,设置了只读属性,肯定不能写的,只可以读
    那么file.canRead()返回true 和file.write()返回 false
      

  5.   

    刚才我测试了一下,感觉canRead和canWrite这两个方法有点问题,确实当文件不可读时依然显示为可读,但确实读不出来,我是用的一个txt文件测试的
    我的测试过程是这样的,首先在 C:\Documents and Settings\谭凌云\桌面\随笔 下有一个文件 随记.txt,它里面有两句话,java真的可以跳过权限吗?java真的可以跳过权限吗? 1、当我把它所有的权限都去掉后,得出的结果是这样的
    2、当我让它有只读的权限时,结果是这样的
    3、当我让它有既可读也可写的权限时,结果是这样的
    附程序代码:import java.io.*;public class FileTest
    {
    public static void main(String[] args)
    {
    File f = new File("C:\\Documents and Settings\\谭凌云\\桌面\\随笔\\随记.txt");
    if(f.isFile())
    System.out.println("It is a file");
    else
    System.out.println("It is not a file");
    if(f.canRead())
    System.out.println("can read");
    else
    System.out.println("can't read");
    if(f.canWrite())
    System.out.println("can write");
    else
    System.out.println("can't Write");
    try
    {
    FileWriter fw = new FileWriter(f,true);
    fw.write("java真的可以跳过权限吗?");
    fw.flush();
    System.out.println("success");
    }
    catch(IOException e)
    {
    e.printStackTrace();
    }
    try
    {
    FileReader fd = new FileReader(f);
    int c;
    while((c=fd.read()) != -1)
    {
    System.out.print((char)c);
    }
    }
    catch(IOException e)
    {
    e.printStackTrace();
    }
    }
    }
      

  6.   

    十分感谢大家对我的帮助,现在问题已经解决。
    我查了一下JAVA API
    java.io.FileNotFoundException只包含2个错误点,如下:[public class FileNotFoundExceptionextends IOException当试图打开指定路径名表示的文件失败时,抛出此异常。 在不存在具有指定路径名的文件时,此异常将由 FileInputStream、FileOutputStream 和 RandomAccessFile 构造方法抛出。如果该文件存在,但是由于某些原因不可访问,比如试图打开一个只读文件进行写入,此时这些构造方法仍然会抛出该异常。] 这样我的问题搞清楚了,捕捉FileNotFoundException
    catch   (FileNotFoundExcepion   e){ 
        if   (!file.exist){ 
            System.out.println("File   is   not   exist!"); //文件不存在 
        } else {
            System.out.println("File   can  not   visit!"); //文件不可访问 
        }
    }最后这个帖子我想给各位加分,但是提示我发帖没有超过5天,不能结贴,等时间到了我会加上去的,也请遇到这方面问题的朋友,能够借鉴一下此例。
      

  7.   

    我也遇到了类似的问题。由于程序试图打开的一个目录对于执行程序的帐户没有访问权限,导致程序错误。这种错误怎么处理。p.s.该目录可读可写也存在,只是当前帐户无权访问(Win7权限问题)