2012-04-05 5 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

+0

'fis'初期化の後に' fis.exists(); 'と' fis.isFile(); 'を呼び出してみてください。彼らはどちらも「真実」を返しますか? – MockerTim

+0

@MockerTim:そうでない場合、両方ともfalseを返します。私は他のシステムで保護されたファイル(ntldrなど)に問題はありませんが、これは通常のファイルには解決できません。トータル・コマンダーを通してファイルのサイズと特性を見ることができます。 – filipbe

答えて

0

falseを返すjava.io.File.exists()方法、およびファイル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

パスが正しいです、ファイルは私のHDDにあります。私はシステム保護されたファイル(C:\ pagefile.sysとfloder "System Volume Information")にのみ問題があります。他のファイルにもアクセスできます(別のプログラムで使用されているファイルでも)。 Windowsはこのフォルダを見るための任意のオプションをブロックしているので、私は今考えている、これはjavaで可能です。 – filipbe

+0

@filipbe 'fis.exists()'は 'true'を返しますか?そうでない場合。別のプログラムで[Guillaume Polet](http://stackoverflow.com/users/928711/guillaume-polet)が提供するコードを実行してみてください。それがうまくいくなら、最も可能性の高い理由は、あなたのコードのどこかの論理的な誤りです。 – MockerTim

2

:ここに は、私はエラーを得た私のコ​​ードの断片である

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

同じです、FWIW。 – adarshr

+0

私には "0"しか印刷されません。私は、他のプログラムで使用されているファイルのサイズも取得したい(Excelで使用されるいくつかの.xlsファイルなど)。 – filipbe

関連する問題