总结了Java方法中创建和写入文件的5种方式。Files.newBufferedWriter(Java8)Files.write(推荐Java7)PrintWriterFile.createNewFileFileOutputStream.write(byte[]b)管道流其实不止这五种。通过管道流的排列组合,其实还有更多的类型。不过笔者总结的这五种可以说是最常用的,也是最佳实践。在我写“流闭包”和“连接闭包”的技术文章之前,经常有人留言:“写技术文章,写流的时候连close()都不知道”,这种留言遇到过无数次!本文中大量使用了try-with-resources语法,这个语法真的是很久以前的了,不过还是有不认识的朋友(知道的略过),还是说一下吧下面的pipelineflow不是我没关闭,是自动关闭的try(实现Closeable接口的类,如pipelineflow,connection等){//这里使用类对象操作}//includewithtry(),finally不需要手动去Object.close(),会自动关闭1.Java8Files.newBufferedWriterjava8提供的newBufferedWriter可以创建文件并写入数据.可以通过appendwrite方式向文件追加内容。@TestvoidtestCreateFile1()throwsIOException{StringfileName="D:\\data\\test\\newFile.txt";Pathpath=Paths.get(fileName);//使用newBufferedWriter创建和写入文件//这里我们使用try-with-resources关闭流的方法,无需手动关闭=Files.newBufferedWriter(path,StandardCharsets.UTF_8,StandardOpenOption.APPEND)){writer.write("HelloWorld-字母哥!!");}}2.Java7Files.write下面的方法Files.write是作者的推荐方法语法简单,底层使用JavaNIO实现。它还提供附加写入模式以将数据附加到现有文件。这种方式是实现文本文件简单读写最方便快捷的方法。@TestvoidtestCreateFile2()throwsIOException{StringfileName="D:\\data\\test\\newFile2.txt";//从JDK1.7开始提供的方法//使用Files.write创建文件并写入Files.write(Paths.get(fileName),"HelloWorld-Createafile!!".getBytes(StandardCharsets.UTF_8));//附加写入方式Files.write(Paths.get(fileName),"HelloWorld-字母哥!!".getBytes(StandardCharsets.UTF_8),StandardOpenOption.APPEND);}3.PrintWriterPrintWriter是一种比较古老的文件创建和写入方法,从JDK1.5开始就有了。比较有特色的是:PrintWriter的println方法可以实现单行写文件。@TestvoidtestCreateFile3()throwsIOException{StringfileName="D:\\data\\test\\newFile3.txt";//从JSD1.5开始就有的方法try(PrintWriterwriter=newPrintWriter(fileName,"UTF-8")){writer.println("HelloWorld-Createafile!!");writer.println("HelloWorld-Letterbrother!!");}//Java10改进支持使用StandardCharsets指定字符集/*try(PrintWriterwriter=newPrintWriter(fileName,StandardCharsets.UTF_8)){writer.println("firstline!");writer.println("secondline!");}*/}4.File.createNewFile()函数的createNewFile()方法比较纯粹,只创建文件,不做文件写操作。返回true表示文件成功,返回false表示文件已经存在。它可以配合FileWriter完成文件写入操作。@TestvoidtestCreateFile4()throwsIOException{StringfileName="D:\\data\\test\\newFile4.txt";Filefile=newFile(fileName);//返回true表示文件成功//false表示文件已经existsif(file.createNewFile()){System.out.println("文件创建成功!");}else{System.out.println("文件已经存在,不需要再次创建");}//使用FileWriter写入文件try(FileWriterwriter=newFileWriter(file)){writer.write("HelloWorld-Createafile!!");}}5.最原始的流水线方式最原始的方式就是使用嵌套管道流的方法,但是笔者认为这种方法已经使用了很长时间了,而且使用起来非常灵活。如果要加Buffer缓冲就嵌套一个BufferedWriter,如果要写java对象到文件就嵌套一个ObjectOutputStream。但是说到底还是要用FileOutputStream。@TestvoidtestCreateFile5()throwsIOException{StringfileName="D:\\data\\test\\newFile5.txt";try(FileOutputStreamfos=newFileOutputStream(fileName);OutputStreamWriterosw=newOutputStreamWriter(fos);BufferedWriterbw=newBufferedWriter(osw);){bw.write("HelloWorld-创建文件!!");bw.flush();}}作者:zimug链接:https://juejin.im/post/6865808689115185160来源:掘金
