2015-05-18 16 views

risposta

14

Un modo per usare la versione di overload di Files.write that accepts a Charset:

import static java.nio.charset.StandardCharsets.UTF_8; 
import static java.nio.file.StandardOpenOption.APPEND; 
import static java.nio.file.StandardOpenOption.CREATE; 

List<String> lines = ...; 
Files.write(log, lines, UTF_8, APPEND, CREATE); 
+0

Grande. Stavo già pensando a quella funzione, ma non sapevo che esistesse un "APPEND" di OpenOption. Ho appena letto "opzioni - opzioni che specificano come il file è aperto" e ho pensato: in nessun modo, questa funzione non mi aiuterà. –

+1

Conoscere le API POSIX, 'open()' in questo caso, aiuta a capire queste cose. Alla fine java può fornire solo wrapper su funzioni di sistema. È anche utile sapere cosa puoi ricondurre a tramite JNA se java non è abbastanza potente. – the8472

+1

@ principal-ideal-domain FYI, è già stato risposto nella domanda che hai linkato http://stackoverflow.com/a/29456593/1587046 E poi potresti semplicemente guardare l'API per vedere che c'è una versione sovraccaricata in cui può specificare il charset https://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#write(java.nio.file.Path,%20java.lang.Iterable,% 20java.nio.charset.Charset,% 20java.nio.file.OpenOption ...) –

3
Path path = Paths.get("..."); 
Charset charset = StandardCharsets.UTF_8; 
List<String> list = Collections.singletonList("..."); 
Files.write(path, charset, list, StandardOpenOption.APPEND); 
+1

piccolo errore di battitura: StandardOpenOption.APPEND – Apostolos

+0

@Apostolos corretto, grazie –

1

Sulla base della risposta accettata nella domanda che indicò:

try (PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream("myfile.txt", true), charset)))) { 
    out.println("the text"); 
} catch (IOException e) { 
    //exception handling left as an exercise for the reader 
}