我如何创build一个文件并在Java中写入?

用Java创build和写入(文本)文件最简单的方法是什么?

请注意,下面的每个代码示例都会抛出IOExcepions Try / catch / finally块为简洁起见已被省略。 有关exception处理的信息,请参阅本教程 。

创build一个文本文件(注意,如果文件已经存在,将会覆盖该文件):

 PrintWriter writer = new PrintWriter("the-file-name.txt", "UTF-8"); writer.println("The first line"); writer.println("The second line"); writer.close(); 

创build一个二进制文件(也将覆盖文件):

 byte data[] = ... FileOutputStream out = new FileOutputStream("the-file-name"); out.write(data); out.close(); 

Java 7+用户可以使用Files类来写入文件:

创build一个文本文件:

 List<String> lines = Arrays.asList("The first line", "The second line"); Path file = Paths.get("the-file-name.txt"); Files.write(file, lines, Charset.forName("UTF-8")); //Files.write(file, lines, Charset.forName("UTF-8"), StandardOpenOption.APPEND); 

创build一个二进制文件:

 byte data[] = ... Path file = Paths.get("the-file-name"); Files.write(file, data); //Files.write(file, data, StandardOpenOption.APPEND); 

在Java 7及更高版本中:

 try (Writer writer = new BufferedWriter(new OutputStreamWriter( new FileOutputStream("filename.txt"), "utf-8"))) { writer.write("something"); } 

虽然有一些有用的工具:

  • FileUtils.writeStringtoFile(..)来自commons-io
  • Files.write(..)来自番石榴

还要注意,你可以使用FileWriter ,但它使用默认编码,这通常是一个坏主意 – 最好是明确指定编码。

下面是java-7之前的原始答案


 Writer writer = null; try { writer = new BufferedWriter(new OutputStreamWriter( new FileOutputStream("filename.txt"), "utf-8")); writer.write("Something"); } catch (IOException ex) { // report } finally { try {writer.close();} catch (Exception ex) {/*ignore*/} } 

另请参阅: 读取,写入和创build文件 (包括NIO2)。

如果您已经拥有要写入文件的内容(并且不是随时生成的),Java 7中的java.nio.file.Files作为本机I / O的一部分提供了实现最简单和最有效的方式你的目标。

基本上创build和写入文件只有一行,而且一个简单的方法调用

以下示例创build并写入6个不同的文件以展示如何使用它:

 Charset utf8 = StandardCharsets.UTF_8; List<String> lines = Arrays.asList("1st line", "2nd line"); byte[] data = {1, 2, 3, 4, 5}; try { Files.write(Paths.get("file1.bin"), data); Files.write(Paths.get("file2.bin"), data, StandardOpenOption.CREATE, StandardOpenOption.APPEND); Files.write(Paths.get("file3.txt"), "content".getBytes()); Files.write(Paths.get("file4.txt"), "content".getBytes(utf8)); Files.write(Paths.get("file5.txt"), lines, utf8); Files.write(Paths.get("file6.txt"), lines, utf8, StandardOpenOption.CREATE, StandardOpenOption.APPEND); } catch (IOException e) { e.printStackTrace(); } 
 public class Program { public static void main(String[] args) { String text = "Hello world"; BufferedWriter output = null; try { File file = new File("example.txt"); output = new BufferedWriter(new FileWriter(file)); output.write(text); } catch ( IOException e ) { e.printStackTrace(); } finally { if ( output != null ) { output.close(); } } } } 

这里有一个小程序来创build或覆盖文件。 这是长版,所以可以更容易地理解。

 import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; public class writer { public void writing() { try { //Whatever the file path is. File statText = new File("E:/Java/Reference/binhttp://img.dovov.comstatsTest.txt"); FileOutputStream is = new FileOutputStream(statText); OutputStreamWriter osw = new OutputStreamWriter(is); Writer w = new BufferedWriter(osw); w.write("POTATO!!!"); w.close(); } catch (IOException e) { System.err.println("Problem writing to the file statsTest.txt"); } } public static void main(String[]args) { writer write = new writer(); write.writing(); } } 

使用:

 try (Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("myFile.txt"), StandardCharsets.UTF_8))) { writer.write("text to write"); } catch (IOException ex) { // Handle me } 

使用try()会自动closuresstream。 这个版本很短,速度快(缓冲),并且可以select编码。

这个特性是在Java 7中引入的。

用Java创build和写入文件的一种非常简单的方法:

 import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; public class CreateFiles { public static void main(String[] args) { try{ // Create new file String content = "This is the content to write into create file"; String path="D:\\a\\hi.txt"; File file = new File(path); // If file doesn't exists, then create it if (!file.exists()) { file.createNewFile(); } FileWriter fw = new FileWriter(file.getAbsoluteFile()); BufferedWriter bw = new BufferedWriter(fw); // Write in file bw.write(content); // Close connection bw.close(); } catch(Exception e){ System.out.println(e); } } } 

参考: 在java中创build文件的例子

在这里我们input一个string到一个文本文件中:

 String content = "This is the content to write into a file"; File file = new File("filename.txt"); FileWriter fw = new FileWriter(file.getAbsoluteFile()); BufferedWriter bw = new BufferedWriter(fw); bw.write(content); bw.close(); // Be sure to close BufferedWriter 

我们可以轻松地创build一个新文件并添加内容。

如果你想有一个相对无痛苦的经历,你也可以看看Apache Commons IO包 ,更具体的是FileUtils类 。

永远不要忘记检查第三方库。 用于date操作的Joda-Time ,用于常见string操作的Apache Commons Lang StringUtils等可以使您的代码更具可读性。

Java是一门伟大的语言,但是标准库有时候有点低级。 尽pipe如此,仍然强大但低层次。

由于作者没有具体说明他们是否需要Java版本的解决scheme(Sun和IBM都是这样,而这些技术上是最普遍的JVM),并且由于大多数人似乎已经回答了作者的问题之前,它是指定它是一个文本(非二进制)的文件,我决定提供我的答案。


首先,Java 6已经普遍达到了使用寿命,而且由于作者没有指定他需要兼容性,所以我猜测它自动意味着J7或更高版本(J7还没有被IBM列入清单)。 所以,我们可以看看文件I / O教程: https : //docs.oracle.com/javase/tutorial/essential/io/legacy.html

在Java SE 7发行版之前,java.io.File类是用于文件I / O的机制,但它有几个缺点。

  • 许多方法失败时不会抛出exception,所以不可能获得有用的错误信息。 例如,如果文件删除失败,程序将收到“删除失败”,但不知道是否是因为该文件不存在,用户没有权限,或者还有其他一些问题。
  • 重命名方法在平台上不一致。
  • 对符号链接没有真正的支持。
  • 需要更多的元数据支持,例如文件权限,文件所有者和其他安全属性。 访问文件元数据效率不高。
  • 许多File方法没有扩展。 通过服务器请求大型目录列表可能会导致挂起。 大目录也可能导致内存资源问题,导致拒绝服务。
  • 如果存在循环的符号链接,那么编写可recursion地遍历文件树并作出适当响应的可靠代码是不可能的。

哦,那就排除了java.io.File。 如果一个文件不能写/附加,你甚至可能不知道为什么。


我们可以继续查看教程: https : //docs.oracle.com/javase/tutorial/essential/io/file.html#common

如果您有所有的行,您将提前写入(附加)到文本文件 ,推荐的方法是https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#写java.nio.file.Path-java.lang.Iterable-java.nio.charset.Charset中,java.nio.file.OpenOption …-

这是一个例子(简化):

 Path file = ...; List<String> linesInMemory = ...; Files.write(file, linesInMemory, StandardCharsets.UTF_8); 

另一个例子(追加):

 Path file = ...; List<String> linesInMemory = ...; Files.write(file, linesInMemory, Charset.forName("desired charset"), StandardOpenOption.CREATE, StandardOpenOption.APPEND, StandardOpenOption.WRITE); 

如果您想要随时编写文件内容,请执行以下操作 : https : //docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#newBufferedWriter-java.nio.file.Path-java .nio.charset.Charset-java.nio.file.OpenOption …-

简单的例子(J8或以上):

 Path file = ...; try (BufferedWriter writer = Files.newBufferedWriter(file)) { writer.append("Zero header: ").append('0').write("\r\n"); [...] } 

另一个例子(追加):

 Path file = ...; try (BufferedWriter writer = Files.newBufferedWriter(file, Charset.forName("desired charset"), StandardOpenOption.CREATE, StandardOpenOption.APPEND, StandardOpenOption.WRITE)) { writer.write("----------"); [...] } 

这些方法在作者的部分上只需要很less的努力,并且在写入[文本]文件时应该被所有其他人所偏好。

使用:

 JFileChooser c = new JFileChooser(); c.showOpenDialog(c); File writeFile = c.getSelectedFile(); String content = "Input the data here to be written to your file"; try { FileWriter fw = new FileWriter(writeFile); BufferedWriter bw = new BufferedWriter(fw); bw.append(content); bw.append("hiiiii"); bw.close(); fw.close(); } catch (Exception exc) { System.out.println(exc); } 

我认为这是最短的方法:

 FileWriter fr = new FileWriter("your_file_name.txt"); // After '.' write // your file extention (".txt" in this case) fr.write("Things you want to write into the file"); // Warning: this will REPLACE your old file content! fr.close(); 

如果你由于某种原因想要分离创build和写作的行为,那么Java的等效性就是

 try { //create a file named "testfile.txt" in the current working directory File myFile = new File("testfile.txt"); if ( myFile.createNewFile() ) { System.out.println("Success!"); } else { System.out.println("Failure!"); } } catch ( IOException ioe ) { ioe.printStackTrace(); } 

createNewFile()做一个存在检查和文件创buildprimefaces。 例如,如果您希望在写入文件之前确保自己是该文件的创build者,那么这会非常有用。

 import java.io.File; import java.io.FileWriter; import java.io.IOException; public class FileWriterExample { public static void main(String [] args) { FileWriter fw= null; File file =null; try { file=new File("WriteFile.txt"); if(!file.exists()) { file.createNewFile(); } fw = new FileWriter(file); fw.write("This is an string written to a file"); fw.flush(); fw.close(); System.out.println("File written Succesfully"); } catch (IOException e) { e.printStackTrace(); } } } 
 package fileoperations; import java.io.File; import java.io.IOException; public class SimpleFile { public static void main(String[] args) throws IOException { File file =new File("text.txt"); file.createNewFile(); System.out.println("File is created"); FileWriter writer = new FileWriter(file); // Writes the content to the file writer.write("Enter the text that you want to write"); writer.flush(); writer.close(); System.out.println("Data is entered into file"); } } 

要创build文件而不覆盖现有文件:

 System.out.println("Choose folder to create file"); JFileChooser c = new JFileChooser(); c.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); c.showOpenDialog(c); c.getSelectedFile(); f = c.getSelectedFile(); // File f - global variable String newfile = f + "\\hi.doc";//.txt or .doc or .html File file = new File(newfile); try { //System.out.println(f); boolean flag = file.createNewFile(); if(flag == true) { JOptionPane.showMessageDialog(rootPane, "File created successfully"); } else { JOptionPane.showMessageDialog(rootPane, "File already exists"); } /* Or use exists() function as follows: if(file.exists() == true) { JOptionPane.showMessageDialog(rootPane, "File already exists"); } else { JOptionPane.showMessageDialog(rootPane, "File created successfully"); } */ } catch(Exception e) { // Any exception handling method of your choice } 

最简单的方法我可以find:

 Path sampleOutputPath = Paths.get("/tmp/testfile") try (BufferedWriter writer = Files.newBufferedWriter(sampleOutputPath)) { writer.write("Hello, world!"); } 

它可能只适用于1.7+。

只有一条线! pathline是string

 import java.nio.file.Files; import java.nio.file.Paths; Files.write(Paths.get(path), lines.getBytes()); 

如果我们使用Java 7及以上版本,并且知道要添加(附加)到文件的内容,我们可以使用NIO包中的newBufferedWriter方法。

 public static void main(String[] args) { Path FILE_PATH = Paths.get("C:/temp", "temp.txt"); String text = "\n Welcome to Java 8"; //Writing to the file temp.txt try (BufferedWriter writer = Files.newBufferedWriter(FILE_PATH, StandardCharsets.UTF_8, StandardOpenOption.APPEND)) { writer.write(text); } catch (IOException e) { e.printStackTrace(); } } 

有几点需要注意:

  1. 指定字符集编码总是一个很好的习惯,并且我们在类StandardCharsets有常量。
  2. 代码使用try-with-resource语句,其中资源在try之后自动closures。

虽然OP没有问,但是如果我们想要search具有特定关键字的行,例如confidential我们可以利用Java中的streamAPI:

 //Reading from the file the first line which contains word "confidential" try { Stream<String> lines = Files.lines(FILE_PATH); Optional<String> containsJava = lines.filter(l->l.contains("confidential")).findFirst(); if(containsJava.isPresent()){ System.out.println(containsJava.get()); } } catch (IOException e) { e.printStackTrace(); } 

使用input和输出stream进行文件读取和写入:

 //Coded By Anurag Goel //Reading And Writing Files import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class WriteAFile { public static void main(String args[]) { try { byte array [] = {'1','a','2','b','5'}; OutputStream os = new FileOutputStream("test.txt"); for(int x=0; x < array.length ; x++) { os.write( array[x] ); // Writes the bytes } os.close(); InputStream is = new FileInputStream("test.txt"); int size = is.available(); for(int i=0; i< size; i++) { System.out.print((char)is.read() + " "); } is.close(); } catch(IOException e) { System.out.print("Exception"); } } } 

只包括这个包:

 java.nio.file 

然后你可以使用这段代码来写这个文件:

 Path file = ...; byte[] buf = ...; Files.write(file, buf); 

有一些简单的方法,如:

 File file = new File("filename.txt"); PrintWriter pw = new PrintWriter(file); pw.write("The world I'm coming"); pw.close(); String write = "Hello World!"; FileWriter fw = new FileWriter(file); BufferedWriter bw = new BufferedWriter(fw); fw.write(write); fw.close(); 

Java 7+值得一试:

  Files.write(Paths.get("./output.txt"), "Information string herer".getBytes()); 

它看起来很有希望

使用Google的Guava库,我们可以很容易地创build和写入文件。

 package com.zetcode.writetofileex; import com.google.common.io.Files; import java.io.File; import java.io.IOException; public class WriteToFileEx { public static void main(String[] args) throws IOException { String fileName = "fruits.txt"; File file = new File(fileName); String content = "banana, orange, lemon, apple, plum"; Files.write(content.getBytes(), file); } } 

该示例在项目根目录中创build一个新的fruits.txt文件。

您甚至可以使用系统属性创build一个临时文件,这个系统属性将独立于您正在使用的操作系统。

 File file = new File(System.*getProperty*("java.io.tmpdir") + System.*getProperty*("file.separator") + "YourFileName.txt"); 

对于多个文件你可以使用:

 static void out(String[] name, String[] content) { File path = new File(System.getProperty("user.dir") + File.separator + "OUT"); for (File file : path.listFiles()) if (!file.isDirectory()) file.delete(); path.mkdirs(); File c; for (int i = 0; i != name.length; i++) { c = new File(path + File.separator + name[i] + ".txt"); try { c.createNewFile(); FileWriter fiWi = new FileWriter(c.getAbsoluteFile()); BufferedWriter buWi = new BufferedWriter(fiWi); buWi.write(content[i]); buWi.close(); } catch (IOException e) { e.printStackTrace(); } } } 

这工作很好。

用JFilechooser读取与客户的集合并保存到文件中。

 private void writeFile(){ JFileChooser fileChooser = new JFileChooser(this.PATH); int retValue = fileChooser.showDialog(this, "Save File"); if (retValue == JFileChooser.APPROVE_OPTION){ try (Writer fileWrite = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileChooser.getSelectedFile())))){ this.customers.forEach((c) ->{ try{ fileWrite.append(c.toString()).append("\n"); } catch (IOException ex){ ex.printStackTrace(); } }); } catch (IOException e){ e.printStackTrace(); } } } 

创build一个示例文件:

 try { File file = new File ("c:/new-file.txt"); if(file.createNewFile()) { System.out.println("Successful created!"); } else { System.out.println("Failed to create!"); } } catch (IOException e) { e.printStackTrace(); }