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

두 가지 방법을 무시해야합니다.

첫 번째는 visitFileFailed() method입니다. 문서 상태로

:

덮어 쓰지 않으면,이 방법은 방문되는 것을 방해하는 파일 I/O 예외 재 - 던진다.

또한 postVisitDirectory() method을 무시해야합니다. 두 개의 인수가 있습니다. 두 번째 인수는 IOException입니다. 오류가있을 경우, 두 번째 인수는 널 (null)이 경우되지 않습니다 다시 문서에서 : 오버라이드 (override)하지 않는 한 디렉토리의 반복은 I/O 예외없이 완료하면

는,이 메소드가 리턴은 계속; 그렇지 않은 경우,이 메소드는 디렉토리의 반복을 발생시키는 입출력 예외를 조기에 종료하도록 (듯이) 재실행합니다.

오류가있는 경우 두 번째 오류는 무시하려는 오류입니다.

그러나 코드에서 file.toFile().renameTo()을 확인했습니다.

아니오. Files.move()을 사용하십시오.


마지막으로 반복하는 동안 이동할 수도 있습니다 ... 이것은별로 좋은 생각이 아닙니다. 예를 들어 디렉토리의 파일 목록은 이전 API와 달리 동적으로 채워집니다.

Map<Path, Path>을 "이름 바꾸기"로 만들고 이름을 모두 방문한 후에 수행해야합니다. 적어도이 경우 진행할 것입니다.