2012-04-05 60 views
2

我正在运行程序以列出存储在文件夹中的所有文件的信息。访问被拒绝 - 获取文件的属性?

我想获得一个文件的属性(对我来说最重要的是文件大小,但我想获得其他属性,如修改日期等)。

我的问题是,当我到达其他程序实际使用的文件时,我无法获得文件的BasicFileAtrributtes。我试着用FileURLRandomFileAcces,但所有这些requiese的打开文件,并抛出异常,如:

java.io.FileNotFoundException: C:\pagefile.sys (Access is denied)

是否有在java中的任何选项来获得这个属性?我不想使用任何额外的库,以保持应用程序的小尺寸。

应用基于java JRE7。

我使用java.nio.file.SimpleFileVisitor访问所有文件。 这里是我的代码,在那里我得到了错误的片段:

@Override 
public FileVisitResult visitFileFailed(Path file, IOException exc){ 
    FileInfo temp=new FileInfo(new FileInfo().repairName(file.toString())); 
    temp.isLeaf=true; 
    temp.fName=temp.fName.replace(strIn, ""); 
    File fis=null; 
    try { 
      fis=new File(file.toAbsolutePath().toString()); 
      if(fis.exists()) 
       System.out.println("exists"); 
      if(fis.isFile()) 
       System.out.println("isFile"); 
      System.out.println(file.toAbsolutePath().toString()); 
      temp.fSize=new BigInteger(new Long(fis.length()).toString());  
    } catch(Exception e){ 
     e.printStackTrace(); 
    } 

    node.add(temp, true); 

    FileListCreator.jProgressBar.setValue(++count); 
    return CONTINUE;   
} 
+1

你可以告诉你正在使用的代码?也许你不小心试图写入只读文件。 – Jivings 2012-04-05 08:53:31

+0

尝试在'fis'初始化后调用'fis.exists();'和'fis.isFile();'。他们都回归'真实'吗? – MockerTim 2012-04-05 09:18:36

+0

@MockerTim:不,他们都返回false。我对其他受系统保护的文件(如ntldr)没有问题,但是这个不能解析为常规文件。我可以通过Total Commander查看文件的大小和属性。 – filipbe 2012-04-05 09:24:02

回答

0

如果java.io.File.exists()返回false的方法,并将该文件C:\pagefile.sys在你的文件存在系统,那么您指定了不正确的文件路径。

下面的代码工作在我的机器上:

package q10025482; 

import java.io.File; 

public class TestFile { 
    public static void main(String[] args) { 
     String fileName = "C:/System Volume Information";//"C:/pagefile.sys" 
     File file = new File(fileName); 
     System.out.println("\nFile " + file.getAbsolutePath() + " info:"); 
     System.out.println("Exists: " + file.exists()); 
     System.out.println("Is file: " + file.isFile()); 
     System.out.println("Is dir: " + file.isDirectory()); 
     System.out.println("Length: " + file.length()); 
     System.out.println(); 
    } 
} 

下面是结果输出:

File C:\System Volume Information info: 
Exists: true 
Is file: false 
Is dir: true 
Length: 24576 
+0

路径正确,该文件存在于我的硬盘上。我只遇到系统保护文件的问题(使用C:\ pagefile.sys和floder“系统卷信息”)。现在可以访问其他文件(甚至是另一个程序使用的文件)。 Windows阻止我看到这个文件夹的任何选项,所以我现在想,这是可能的Java。 – filipbe 2012-04-05 10:27:53

+0

@filipbe'fis.exists()'现在返回'true'吗?如果不。尝试在单独的程序中执行[Guillaume Polet](http://stackoverflow.com/users/928711/guillaume-polet)提供的代码。如果它起作用,那么最可能的原因就是代码中的某处出现逻辑错误。 – MockerTim 2012-04-05 10:33:27

2

这只是正常的我:

File temp = new File("c:\\pagefile.sys"); 
System.err.println(temp.length()); 
System.err.println(temp.lastModified()); 
+1

同样在这里,FWIW。 – adarshr 2012-04-05 08:59:35

+0

它只为我打印“0”。我想获得另一个程序使用的文件的大小(如Excel使用的一些.xls文件)。 – filipbe 2012-04-05 09:11:47