public static void writeFile(String fileName, String contents, boolean append) throws IOException {
try {
File file = new File(fileName);
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream(file, append), "GB2312"));
writer.write(contents);
writer.flush();
writer.close();
} catch (IOException e) {
throw new RuntimeException(e);
目前在网上很多人用FilterWriter来写文件, 但是FilterWriter 不能指定编码格式, 导致编码问题,
有些人换成BufferedWriter 来写文件, 可以指定构建时的编码,但是又不知道怎么追加到文件尾.
因此, 今天把本人工作中用到的代码整理后归纳二式方式, 供大家参考.
同时以多线程同时读/写同一个文件, 边写,边读, 以下是完整代码:
package ...
关于writer()写入文件,原来的代码写的是
FileWriter fileWriter = new FileWriter(file);
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
bufferedWriter.write("写入文件内容");
虽然中文也没有乱码,但是当文件有具体编码格式要求的时候,发现BufferedWriter和FileWriter并没有设置编码格式的参数。
查了一下发现可以用以下方式代替:
BufferedReader
从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。
可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。
通常,Reader 所作的每个读取请求都会导致对基础字符或字节流进行相应的读取请求。因此,建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 File...
apend方法中参数可以为null 会以字符串"null"的形式添加到文件中 writer会报空指针异常
append可以这么写 BufferWriter.append("").append("").append("").append("").append("")
writer只能写一个 也就是说writer的返回值是空 而append的返回值Writer(BufferWri
写入文件出现乱码问题 :
BufferedWriter w = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(fileName)),"GBK"));
w.write(new String("中文中文中文中文中文中文中文中文".getBytes("utf-8"),"G
File file = new File("example.txt"); // 文件路径
String charset = "UTF-8"; // 指定编码格式
StringBuilder sb = new StringBuilder();
try (InputStreamReader isr = new InputStreamReader(new FileInputStream(file), charset);
BufferedReader br = new BufferedReader(isr)) {
String line;
while ((line = br.readLine()) != null) {
sb.append(line).append(System.lineSeparator()); // 按行读取并添加到StringBuilder中
} catch (IOException e) {
e.printStackTrace();
String content = sb.toString(); // 读取的文件内容
System.out.println(content);
上述代码中,我们首先创建了一个File对象,指定了要读取的文件路径。然后使用InputStreamReader和FileInputStream来按指定编码格式读取文件,并使用BufferedReader按行读取文件内容,将每行内容添加到StringBuilder中。最后将StringBuilder转换为字符串并输出。
如果要写入指定编码格式的txt文件,可以使用OutputStreamWriter和FileOutputStream。具体实现方法如下:
```java
File file = new File("example.txt"); // 文件路径
String charset = "GBK"; // 指定编码格式
try (FileOutputStream fos = new FileOutputStream(file, true);
OutputStreamWriter osw = new OutputStreamWriter(fos, charset);
BufferedWriter bw = new BufferedWriter(osw)) {
bw.write("新加的" + charset + "字符,原来的一行是" + charset + "格式");
bw.newLine(); // 换行
} catch (IOException e) {
e.printStackTrace();
上述代码中,我们首先创建了一个File对象,指定了要写入的文件路径。然后使用OutputStreamWriter和FileOutputStream来按指定编码格式写入文件,并使用BufferedWriter写入文件内容,最后使用newLine()方法换行。