如何用Java写入文件

时间:2020-01-09 10:35:31  来源:igfitidea点击:

这篇文章显示了使用Java写入文件的各种选项。

在Java中,有两个类FileWriter和FileOutputStream用于写入文件。这两个FileWriter中的一个用于写入字符流,而FileOutputStream用于写入原始字节流。

通常,Writer立即将其输出发送到基础字符或者字节流。除非需要即时输出,否则建议将BufferedWriter包装在其write()操作可能会很昂贵的所有Writer周围,例如FileWriters和OutputStreamWriters。

因此,用于在Java中写入文件的类是BufferedWriter和BufferedOutputStream。

要查看可用于读取Java文件的其他选项,请查看此文章如何读取Java文件

除了这些类之外,Java 7中添加的Files类还提供了用Java写入文件的方法。有Files.write()方法可将字节写入文件。还有一个Files.newBufferedWriter()方法,该方法返回BufferedWriter,可用于以有效方式将文本写入文件。

因此,在Java中,有四个选项可用于写入文件

  • 使用BufferedWriter
  • 使用BufferedOutputStream
  • 使用Files.write()方法
  • 使用Files.newBufferedWriter()方法

Java程序使用BufferedWriter写入文件

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class WriteToFile {
  public static void main(String[] args) {
    writeFile("D:\test.txt");
  }
	
  private static void writeFile(String fileName){
    BufferedWriter bw = null;
    try {
      // wrapping FileWriter instance
      bw = new BufferedWriter(new FileWriter(fileName));
      bw.write("This is a test line");
      bw.newLine();
      bw.write("Line written by Java program in theitroad.com");
    }catch (IOException exp){
      exp.printStackTrace();
    }finally{
      if(bw != null){
        try {
          bw.close();
        } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
      }
    }
  }
}

Java程序使用BufferedOutputStream写入文件

如果必须写原始字节,则可以使用BufferedOutputStream类。在示例代码中,使用getBytes()方法将字符串编码为字节。

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class WriteToFile {
  public static void main(String[] args) {
    writeFile("D:\test.txt");
  }
	
  private static void writeFile(String fileName){
    BufferedOutputStream bw = null;
    try {
      bw = new BufferedOutputStream(new FileOutputStream(fileName));
      // may have to use \r\n for Windows OS
      bw.write("This is a test line\n".getBytes());
      bw.write("Line written by Java program in theitroad.com".getBytes());
    }catch (IOException exp){
      exp.printStackTrace();
    }finally{
      if(bw != null){
        try {
          bw.close();
        } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
      }
    }
  }
}

使用Files.write()方法写入文件的Java程序

此方法将字节写入文件,因此必须将内容作为字节数组传递。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class WriteToFile {
  public static void main(String[] args) {
    String content = "This is a test line.\nLine written by Java program in theitroad.com.";
    try {
      Files.write(Paths.get("D:\test.txt"), content.getBytes());
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
}

使用Files.newBufferedWriter()方法写入文件的Java程序

public class WriteToFile {

  public static void main(String[] args) {
    BufferedWriter bw = null;
    String content = "This is a test line.\nLine written by Java program in theitroad.com.";
    try {
      bw = Files.newBufferedWriter(Paths.get("D:\test.txt"));
      bw.write(content);			 
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }finally{
      if(bw != null){
        try {
          bw.close();
        } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
      }
    }
  }
}

从Java 7开始,我们还可以使用try-with-resources自动关闭资源,而不是使用finally块显式关闭资源。

import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class WriteToFile {
  public static void main(String[] args) {
    String content = "This is a test line.\nLine written by Java program in theitroad.com.";		
    try (BufferedWriter bw = Files.newBufferedWriter(Paths.get("D:\test.txt"))) {
      bw.write(content);			 
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
}