2016-09-08 11 views
0

私はmp4ファイルのためのハードドライブのディスクを検索し、それらを特定のフォルダにコピーするプログラムを作成しています。しかし、私は問題があります。私はアクセスする権限がありません: "C:\ Documents and Settings"のように私のプログラムは動作を停止します。だから私のコードです、私はブラックリストを作成しようとしましたが、まったく動作しません。Java SimpleFileVisitorの問題

package S; 

import java.io.File; 
import java.io.IOException; 
import java.nio.file.FileVisitResult; 
import java.nio.file.Files; 
import java.nio.file.Path; 
import java.nio.file.Paths; 
import java.nio.file.SimpleFileVisitor; 
import java.nio.file.attribute.BasicFileAttributes; 

    public class C { 
     public static void main(String args[]) throws IOException { 
      Path dir = Paths.get("C:/"); 
     Files.walkFileTree(dir, new FindJavaVisitor()); 
    } 

    private static class FindJavaVisitor extends SimpleFileVisitor<Path> { 

     @Override 
     public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { 
      if (file.toString().contains(".mp4")) { 
       file.toFile().renameTo(new File("C:/MP4/"+file.toFile().getName())); 
      } 
      return FileVisitResult.CONTINUE; 
     } 
    } 
} 

私を助けてくれてありがとう。

答えて

0

2つの方法をオーバーライドする必要があります。

最初はvisitFileFailed() methodです。ドキュメントの状態として

オーバーライドされない限りは、この方法を訪問しているからファイルを防止I/O例外を再スローします。

また、postVisitDirectory() methodを上書きする必要があります。 2つの引数を持ち、2番目の引数はIOExceptionです。

オーバーライドされていない限り、このメソッドはディレクトリの反復処理がI/O例外なしで完了した場合はCONTINUEを返し、それ以外の場合はCONTINUEを返します。それ以外の場合、このメソッドは、ディレクトリの反復を早期に終了させる原因となったI/O例外を再スローします。

エラーが発生した場合、もう1つはオーバーライドするエラーです。

ただし、あなたのコードではfile.toFile().renameTo()と表示されています。

いいえ。 Files.move()を使用してください。


最後に、反復処理中にも移動します。これはあまり良い考えではありません。たとえば、ディレクトリ内のファイルのリストは、古いAPIとは異なり、動的に読み込まれます。

Map<Path, Path>を「名前を変更する」を作成し、すべて訪問した後で名前を変更する必要があります。少なくともこれは私がこの場合にどのように進行するかである。