Sto cercando di aggiungere un tag metadata personalizzato a qualsiasi tipo di file utilizzando la funzionalità di java.nio.file.Files. Sono stato in grado di leggere correttamente i metadati, ma ho problemi ogni volta che provo ad impostare i metadati.Problemi con i metadati dei file con Java nio
Ho cercato di impostare un elemento di metadati personalizzati con una stringa semplice utilizzando Files.setAttribute con il seguente
Path photo = Paths.get("C:\\Users\\some\\picture\\path\\2634.jpeg");
try{
BasicFileAttributes attrs = Files.readAttributes(photo, BasicFileAttributes.class);
Files.setAttribute(photo, "user:tags", "test");
String attribute = Files.getAttribute(photo, "user:tags").toString();
System.out.println(attribute);
}
catch (IOException ioex){
ioex.printStackTrace();
}
ma finiscono con il seguente errore:
Exception in thread "main" java.lang.ClassCastException: java.lang.String non può essere lanciato a java.nio.ByteBuffer
se provo a lanciare quella stringa in un ByteBuffer in questo modo
Path photo = Paths.get("C:\\Users\\some\\picture\\path\\2634.jpeg");
try{
BasicFileAttributes attrs = Files.readAttributes(photo, BasicFileAttributes.class);
Files.setAttribute(photo, "user:tags", ByteBuffer.wrap(("test").getBytes("UTF-8")));
String attribute = Files.getAttribute(photo, "user:tags").toString();
System.out.println(attribute);
}
catch (IOException ioex){
ioex.printStackTrace();
}
invece di emettere il testo di 'test', che emette la stringa di caratteri strani '[B @ 14e3f41'
Qual è il modo corretto per convertire una stringa in un ByteBuffer e lo hanno essere convertibile in una stringa e c'è un modo più personalizzabile per modificare i metadati su un file usando java?
Grazie per la risposta dettagliata, ha aiutato a risolvere il problema, ma ciò significa che TUTTI i tag definiti dall'utente di qualsiasi tipo di dati che potrei avere dovrebbero prima essere codificati in un array di byte in scrittura e decodificati nel tipo corrispondente ogni volta che dovevano essere letti? – lobobabysaurus
@PhilSimmons, in effetti, significa esattamente questo; gli attributi definiti dall'utente possono essere letteralmente qualsiasi cosa, non solo contenuti di testo! – fge
@PhilSimmons nota che c'è un'altra opzione per leggere/scrivere attributi (passando attraverso 'View'); è un po 'più complicato, tuttavia – fge