我需要将文本重复附加到 Java 中的现有文件中。我怎么做?
你这样做是为了记录目的吗?如果是这样,那么有几个库。其中最流行的两个是Log4j和Logback。
对于一次性任务,Files 类使这很容易:
try { Files.write(Paths.get("myfile.txt"), "the text".getBytes(), StandardOpenOption.APPEND); }catch (IOException e) { //exception handling left as an exercise for the reader }
小心NoSuchFileException:如果文件不存在,上述方法将抛出一个。它也不会自动附加换行符(在附加到文本文件时通常需要)。另一种方法是同时传递CREATE和APPEND选项,如果文件不存在,它将首先创建文件:
NoSuchFileException
CREATE
APPEND
private void write(final String s) throws IOException { Files.writeString( Path.of(System.getProperty("java.io.tmpdir"), "filename.txt"), s + System.lineSeparator(), CREATE, APPEND ); }
但是,如果您将多次写入同一个文件,则上述代码段必须多次打开和关闭磁盘上的文件,这是一个缓慢的操作。在这种情况下, aBufferedWriter更快:
BufferedWriter
try(FileWriter fw = new FileWriter("myfile.txt", true); BufferedWriter bw = new BufferedWriter(fw); PrintWriter out = new PrintWriter(bw)) { out.println("the text"); //more code out.println("more text"); //more code } catch (IOException e) { //exception handling left as an exercise for the reader }
笔记:
FileWriter
PrintWriter
println
System.out
try { PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("myfile.txt", true))); out.println("the text"); out.close(); } catch (IOException e) { //exception handling left as an exercise for the reader }
如果您需要对旧 Java 进行强大的异常处理,它会变得非常冗长:
FileWriter fw = null; BufferedWriter bw = null; PrintWriter out = null; try { fw = new FileWriter("myfile.txt", true); bw = new BufferedWriter(fw); out = new PrintWriter(bw); out.println("the text"); out.close(); } catch (IOException e) { //exception handling left as an exercise for the reader } finally { try { if(out != null) out.close(); } catch (IOException e) { //exception handling left as an exercise for the reader } try { if(bw != null) bw.close(); } catch (IOException e) { //exception handling left as an exercise for the reader } try { if(fw != null) fw.close(); } catch (IOException e) { //exception handling left as an exercise for the reader } }