Java创建和写入文件的方法有很多种,你真的认真总结过吗?下面笔者就帮大家总结一下java中创建文件的五种方法。Files.newBufferedWriterFiles.writePrintWriterFile.createNewFileFileOutputStream.write(byte[]b)其实不止这五种。通过pipeline流的排列组合其实还有更多的类型,但是笔者总结的这5种可以说是最常用也是最好的。实践,前提小知识以前写涉及“流关闭”和“连接关闭”的技术文章时,经常有人留言:“我还在写技术文章,写一个时不知道close()溪流”。遇到过无数次!在本文中,大量使用了try-with-resources语法。这个语法用了很久,但是确实有小伙伴不知道(知道的可以跳过)。还是说一下,下面的pipeline流程不是我没关闭,是自动关闭的。try(实现Closeable接口的类,如管道流、连接等){//这里使用类对象操作}//用try()包含它,这样就不需要手动去Object.close了()最后会自动关闭1.Java8Files.newBufferedWriterjava8提供的newBufferedWriter可以创建文件并写入数据。您可以通过附加写入模式将内容附加到文件中。@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();}}
