2014-12-16 15 views
7

Próbuję odczytać listę plików i znaleźć użytkownika, który utworzył plik. Z systemem * nix, można zrobić coś takiegouzyskiwanie atrybutów twórcy plików/właściciela w Javie

Map<String, Object> attrs = Files.readAttributes(Paths.get(filename), "posix:*"); 

Jednak gdy próbuje go w systemie Windows, pojawia się błąd, ponieważ system Windows nie jest w stanie uzyskać dostęp do właściwości POSIX. Można dostać się na „zwykłej” (non POSIX) właściwości w ten sposób:

attrs = Files.readAttributes(Paths.get(filename), "*"); 

Ale twórca plik nie jest zawarte w tym wykazie.

Czy istnieje sposób, aby dowiedzieć się, kto utworzył plik w programie Java działającym w systemie Windows?

+0

mogę się mylić, ale wierzę, że na większości systemów operacyjnych można uzyskać tylko obecny właściciel pliku zamiast kto go stworzył. Być może będziesz musiał sprawdzić, czy jest to jakiś rodzaj kontroli zmian plików. – mkobit

Odpowiedz

3

wierzę można użyć Files.getOwner(Path, LinkOption...) dostać obecnego właściciela (którym może być również twórcą) jak

Path path = Paths.get("c:\\path\\to\\file.ext"); 
try { 
    UserPrincipal owner = Files.getOwner(path, LinkOption.NOFOLLOW_LINKS); 
    String username = owner.getName(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

to powinno działać, jeśli jest to system plików, który obsługuje FileOwnerAttributeView. Ten widok atrybutów plików zapewnia dostęp do atrybutu pliku, który jest właścicielem pliku.

0

Można użyć FileOwnerAttributeView uzyskać Właściciel info:

Path filePath = Paths.get("your_file_path_goes_here"); 
FileOwnerAttributeView ownerInfo = Files.getFileAttributeView(filePath, FileOwnerAttributeView.class); 
UserPrincipal fileOwner = ownerInfo.getOwner(); 
System.out.println("File Owned by: " + fileOwner.getName()); 
Powiązane problemy