2014-12-16 25 views
7

Sto cercando di leggere un elenco di file e trovare l'utente che ha creato il file. Con un sistema * nix, si può fare qualcosa di simile aacquisizione di attributi del proprietario del file/proprietario in Java

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

Tuttavia, quando si cerca su un sistema Windows, ottengo un errore perché Windows non è in grado di accedere alle proprietà POSIX. È possibile ottenere il "normale" (non POSIX) proprietà in questo modo:

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

Ma il creatore del file non è incluso in tale elenco.

C'è un modo per scoprire chi ha creato il file in un programma Java in esecuzione su Windows?

+0

potrei sbagliarmi, ma credo che il più sistemi operativi che si può ottenere solo l'attuale proprietario del file, piuttosto che chi l'ha creato. Potrebbe essere necessario vedere se la loro è una sorta di auditing sulle modifiche ai file. – mkobit

risposta

3

Credo che si può utilizzare Files.getOwner(Path, LinkOption...) per ottenere l'attuale proprietario (che può essere anche il creatore) come

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(); 
} 

Questo dovrebbe funzionare se si tratta di un file system che supporta FileOwnerAttributeView. Questa vista degli attributi del file fornisce l'accesso a un attributo file che è il proprietario del file.

0

È possibile utilizzare il FileOwnerAttributeView per ottenere il proprietario informazioni:

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()); 
Problemi correlati