2011-11-27 5 views
0

파일 시스템에서 파일을 이동하거나 이름을 변경하는 경우에도 파일을 추적하는 방법을 찾으려고합니다.Java에서 파일 변경 사항을 추적하기위한 파일 ID?

내가 가진 한 가지 아이디어는 Java 7에서 새 UserDefinedFileAttributeView를 사용하고 사용자 정의 파일 유형으로 사용자 정의 파일 속성을 만드는 것입니다. 나는 이것이 다른 플랫폼 (Windows와 Mac)에서 작동한다고 생각했다. 그러나 나는 그것을 작동시킬 수 없다. 심지어이 페이지의 예제를 연습하기 - http://docs.oracle.com/javase/tutorial/essential/io/fileAttr.html -이 라인에 도착하면 :

UserDefinedFileAttributeView보기 = Files.getFileAttributeView (파일, UserDefinedFileAttributeView.class);

뷰 변수에 대해서만 null 값을 가져오고 프로그램은 nullpointer 예외로 중지합니다.

그런 다음 최소한 Mac에서이 작업을 수행하는 것이 더 쉬운 방법이라는 것을 발견했습니다. BasicFileAttributes fileKey 특성을 사용하십시오. 나는 이것을 시도하고 fileKey는 파일을 이동하거나 이름을 변경하더라도 동일하게 유지되는 것처럼 보입니다. 그러나이 기능은 플랫폼에 따라 다르며 Windows에서 작동하지 않는 어딘가에있는 것을 기억합니다 ...

우선, fileKey 메서드는 Mac에서 안정적인 방법입니까? 그렇다면 Windows에서 동일한 기능을 수행하려면 어떻게해야합니까? 누구나 내가 왜 UserDefinedFileAttributeView에 null이되는지 알 수 있습니까? 왜냐하면 내가 그것을 작동시킬 수 있다면 그것은 크로스 플랫폼이어야한다고 생각합니다. ...

답변

0

은 그냥 개발하고 있어요 작은 도우미 응용 프로그램입니다, 슈퍼 강력하고 확장 할 필요가있는 것이 아닙니다,하지만 이동하거나 이름을 바꿀 때 파일을 식별 이상 신뢰할 수 있어야

Windows XP 컴퓨터에서 Oracle 예제를 시도했습니다. 코드 예제에는 아주 사소한 버그가 있었지만이 외에도 코드는 정상적으로 작동했습니다. 적어도 Windows XP에서는 문제가 없었습니다. 바라 건데 그것은 리눅스 등에서도 작동 하겠지만 개인적으로 Windows XP에서만 시도해 보았습니다.

public static void main(String args[]) 
     throws Exception 
{ 
    Path target = Paths.get("C:\\mytemp\\Something.txt"); 
    Files.createFile(target); 
    UserDefinedFileAttributeView view = Files.getFileAttributeView(target, UserDefinedFileAttributeView.class); 
    view.write("user.mimetype", Charset.defaultCharset().encode("text/html")); 
    String name = "user.mimetype"; 
    ByteBuffer buf = ByteBuffer.allocate(view.size(name)); 
    view.read(name, buf); 
    buf.flip(); 
    String value = Charset.defaultCharset().decode(buf).toString(); 
    System.out.println("value="+value); 

단지 속성이보기에서 읽히지 않았는지 확인하기 위해 제 2보기를 사용하여 동일한 코드를 실행했습니다. 이것은 또한 사용자 정의 파일은 모든 주요 플랫폼에서 작업 속성 경우 같은 사용자 정의 파일 속성이 어떤 상황에서 믿을 수 없을만큼 편리으로

public static void main(String args[]) 
     throws Exception 
{ 
    Path target = Paths.get("C:\\mytemp\\SomethingDifferent.txt"); 
    Files.createFile(target); 
    UserDefinedFileAttributeView view = Files.getFileAttributeView(target, UserDefinedFileAttributeView.class); 
    view.write("user.mimetype", Charset.defaultCharset().encode("text/html")); 
    String name = "user.mimetype"; 

    UserDefinedFileAttributeView view2 = Files.getFileAttributeView(target, UserDefinedFileAttributeView.class); 
    ByteBuffer buf = ByteBuffer.allocate(view2.size(name)); 
    view2.read(name, buf); 
    buf.flip(); 
    String value = Charset.defaultCharset().decode(buf).toString(); 
    System.out.println("value="+value); 


} 

그것은, 좋은 것 ... 일했다. 그들이하기를 희망한다.

+0

을, 그러나 당신이 일하도록하는 것이 흥미 롭습니다. 고마워, 나는 기회가있을 때 그것을 시도 할 것이다. – Anders

+0

UserDefinedFileAttributeView의 저장 방법은 Windows에서 어떻게 이루어 집니까? – Shrenik