2012-02-06 2 views
1

私はあなたのファイルシステムを見ることを可能にするプログラムを作る過程にあります。 私はそれをテストしていましたが、問題に遭遇しました。「Documents and Settings」というディレクトリがC:\ドライブにあり、そこには存在しないと言っていました。これも「隠しフォルダ」オプションにして、私は見つけることができないよう、ディレクトリのかなり多くを出力し、何らかの理由で既存のフォルダがないJavaリストの配列..なぜですか?

File f = new File(path); //path being a path sent by the client, for example C:\ 
      if(f.isFile()){ 
       //TODO start downloading it. 
       out.println("ERR: no dir!"); 
       return; 
      } 
      Server.log.log("System path requested: " + f.getAbsolutePath()); 
      File[] files = f.listFiles(); 
      for(int i = 0; i < files.length; i++){ 
       File found = files[i]; 
       if(!found.exists()){ 
        continue; 
       } 
       if(found.isDirectory()){ 
        out.println("dir:" + found.getName()); 
       }else{ 
        out.println(found.getName()); 
       } 
       System.out.println("Printed " + found.getName()); 
      } 
      out.println("ENDOFLIST"); //Notify the client it has to stop receiving data 

は、これは私が私のファイルの配列を取得する方法です。

これらのディレクトリにアクセスしようとすると、ディレクトリの内容を読み取ろうとしますが、ディレクトリが存在しないため例外がスローされ、ソケット上でデータが送信されず、クライアントがフリーズします。

私の質問です:ファイル/ディレクトリが本当に存在するかどうかを確認する方法はありますか?コードブロックを見ると、ファイル/ディレクトリが存在しない場合は、それをソケットに書き込むのではなく、すでに続けていることに注意してください。

私はそれをGoogleに与えましたが、一致するものは見つかりませんでした。また、私は検索機能を行ってきましたが、それに似たものはありませんでした。

答えて

1

Java 7で導入された新しいFil I/O APIを使用することをお勧めします。この機能は、特定のファイルシステムが提供する機能を大幅に改善しました。また、ファイルツリーを歩くこともできます。

大いに役立つFileVisitorhttp://docs.oracle.com/javase/7/docs/api/java/nio/file/FileVisitor.htmlをご覧ください。

+0

システムフォルダかどうか正確にチェックできますか? – Lolmewn

+0

システムフォルダかどうか正確にチェックしますか?私は、BasicFileAtrributesのisRegularFile()とisDirectory()を見ていましたが、isSystemFileなんかは似ていませんでした。 – Lolmewn

+1

次を参照してください。http://docs.oracle.com/javase/7/docs/api/java/nio/file/attribute/DosFileAttributes.html NTFSで操作しているためです。 'isSystem()'メソッドを持っています。 –

3

これらは隠されていますシステムフォルダです。
存在します。本当に。

多くのユーザーに読み取りアクセス権がないため、例外が発生します。

+0

しかし、なぜWindowsエクスプローラで見つけることができないのですか? Windows 7を使用しています。 – Lolmewn

+1

@Lolmewn:Windowsエクスプローラの "show system files"オプションを有効にして、隠しファイルを表示するオプションの近くで試してみてください。 –

+0

ああ、今私はそれらを参照してください。上に掲載されているのを避ける方法を見つけることに。 – Lolmewn

関連する問題