用Java如何追加内容到文件中

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

在Java中,有两个类FileWriter和FileOutputStream用于写入文件。其中FileWriter用于写入字符流,而FileOutputStream用于写入原始字节流。这两个类都有一个带有布尔参数的构造函数。当该布尔参数作为true传递时,内容将被写入文件的末尾。

例如– public FileWriter(File file,boolean append);

我们应该始终使用包装器类BufferedWriter和BufferedOutputStream,而不是直接使用这些类。

除了这些类之外,Java 7中添加的Files类还提供了添加到Java文件中的方法。有可以使用的Files.write()方法。

Files.write(path, bytes, StandardOpenOption.APPEND);

另一种方法是

Files.newBufferedWriter(Path path, StandardOpenOption.APPEND);

Java程序添加内容到Java文件中

让我们看一下使用上述选项在Java中添加文件的示例。

使用Java BufferedWriter添加到文件

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

public class AppendFile {

	public static void main(String[] args) {
		//Change path for windows
		appendToFile("D://test.txt");
	}

	private static void appendToFile(String fileName){
		BufferedWriter bw = null;
		try {
			// wrapping FileWriter instance, passing second arg 
			// as true for appending
			bw = new BufferedWriter(new FileWriter(fileName, true));
			bw.write("This is a test line");
			bw.newLine();
			bw.write("Line written by Java program in theitroad.com");
			bw.newLine();		
		}catch (IOException e) {
		   e.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 AppendFile {

	public static void main(String[] args) {
		//Change path for windows
		appendToFile("D://test.txt");
	}

	private static void appendToFile(String fileName){
		BufferedOutputStream bos = null;
		try {
			// wrapping FileOutputStream instance, passing second arg 
			// as true for appending
			bos = new BufferedOutputStream(new FileOutputStream(fileName, true));
			// \r\n for windows
			bos.write("This is a test line\r\n".getBytes());
			bos.write("Line written by Java program in theitroad.com\r\n".getBytes());
		}catch (IOException e) {
		   e.printStackTrace();
		}finally{
			if(bos != null){
				try {
					bos.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;
import java.nio.file.StandardOpenOption;

public class AppendFile {

	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(), StandardOpenOption.APPEND);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

使用Files.newBufferedWriter()方法添加到文件

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

public class AppendFile {
	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"), StandardOpenOption.APPEND)) {
			 bw.write(content);			 
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

这里try-with-resources用于自动关闭资源,而不是使用finally块显式关闭资源。