原文:http://www.111cn.net/jsp/Java/57796.html
一,FileWritter写入文件
FileWritter, 字符流写入字符到文件。默认情况下,它会使用新的内容取代所有现有的内容,然而,当指定一个true (布尔)值作为FileWritter构造函数的第二个参数,它会保留现有的内容,并追加新内容在文件的末尾。
1. 替换所有现有的内容与新的内容。
new FileWriter(file);2. 保留现有的内容和附加在该文件的末尾的新内容。
new FileWriter(file,true); |
追加文件示例
一个文本文件,命名为“javaio-appendfile.txt”,并包含以下内容。
ABC Hello追加新内容 new FileWriter(file,true)
package com.yiibai.file; import java.io.File; import java.io.FileWriter; import java.io.BufferedWriter; import java.io.IOException; public class AppendToFileExample { public static void main( String[] args ) { try{ String data = " This content will append to the end of the file"; File file =new File("javaio-appendfile.txt"); //if file doesnt exists, then create it if(!file.exists()){ file.createNewFile(); } //true = append file FileWriter fileWritter = new FileWriter(file.getName(),true); BufferedWriter bufferWritter = new BufferedWriter(fileWritter); bufferWritter.write(data); bufferWritter.close(); System.out.println("Done"); }catch(IOException e){ e.printStackTrace(); } } } |
结果
现在,文本文件“javaio-appendfile.txt”内容更新如下:
ABC Hello This content will append to the end of the file
二,BufferedWriter写入文件
缓冲字符(BufferedWriter )是一个字符流类来处理字符数据。不同于字节流(数据转换成字节),你可以直接写字符串,数组或字符数据保存到文件。
package com.yiibai.iofile; |
三,FileOutputStream写入文件
文件输出流是一种用于处理原始二进制数据的字节流类。为了将数据写入到文件中,必须将数据转换为字节,并保存到文件。请参阅下面的完整的例子。
package com.yiibai.io; 更新的JDK7例如,www.111cn.net使用新的“尝试资源关闭”的方法来轻松处理文件。 package com.yiibai.io; |
package com.expgiga; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; /** * Java字节流是处理8bit字节的输入和输出。尽管有很多有关字节流的类,但是最常用的是FileInputStream类和FileOutputStream */ public class CopyFileByBytes { public static void main(String[] args) throws IOException { FileInputStream inputStream = null; FileOutputStream outputStream = null; try { inputStream = new FileInputStream("input.txt"); outputStream = new FileOutputStream("output.txt"); int c; while (-1 != (c = inputStream.read())) { outputStream.write(c); } } finally { if (null != inputStream) { inputStream.close(); } if (null != outputStream) { outputStream.close(); } } } }
package com.expgiga; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; /** * Java字符流用于处理16位unicode的输入和输出 */ public class CopyFileByChar { public static void main(String[] args) throws IOException { FileReader in = null; FileWriter out = null; int c; try { in = new FileReader("input.txt"); out = new FileWriter("output.txt"); while (-1 != (c = in.read())) { out.write(c); } } finally { if (null != in) { in.close(); } if (null != out) { out.close(); } } } }
可以指定编码如:utf-8来写入和读取文件。如果文件编码未知,可以通过该方法先得到文件的编码后再指定正确的编码来读取,否则会出现文件乱码问题。
如何识别文件编码请参考:java自动根据文件内容的编码来读取避免乱码
- package com.zuidaima.util;
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.OutputStreamWriter;
- public class ReadWriteFileWithEncode {
- public static void write(String path, String content, String encoding)
- throws IOException {
- File file = new File(path);
- file.delete();
- file.createNewFile();
- BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
- new FileOutputStream(file), encoding));
- writer.write(content);
- writer.close();
- }
- public static String read(String path, String encoding) throws IOException {
- String content = "";
- File file = new File(path);
- BufferedReader reader = new BufferedReader(new InputStreamReader(
- new FileInputStream(file), encoding));
- String line = null;
- while ((line = reader.readLine()) != null) {
- content += line + "\n";
- }
- reader.close();
- return content;
- }
- public static void main(String[] args) throws IOException {
- String content = "中文内容";
- String path = "c:/test.txt";
- String encoding = "utf-8";
- ReadWriteFileWithEncode.write(path, content, encoding);
- System.out.println(ReadWriteFileWithEncode.read(path, encoding));
- }
- }
原文:http://blog.youkuaiyun.com/yaerfeng/article/details/19345597
Java指定编码读写文件(UTF-8)
读取
imp
imp
String FileContent = ""; // 文件很长的话建议使用StringBuffer
try {
FileInputStream fis = new FileInputStream("d:\\input.txt");
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
FileContent += line;
FileContent += "\r\n"; // 补上换行符
}
} catch (Exception e) {
e.printStackTrace();
}
写入
imp
String FileContent = "文件内容";
try {
FileOutputStream fos = new FileOutputStream("d:\\output.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
osw.write(FileContent);
osw.flush();
} catch (Exception e) {
e.printStackTrace();
}
读写文件是最常用的操作之一,每次将相应的代码片段复制过来不仅麻烦,还会影响整体的美观。为此我单独写了一个文件操作的类,需要时先把这个类的代码粘过去,再调用就方便多了。
package com.immomo.tools.file;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
public class FileManager {
private static final String SEP = System.getProperty("line.separator");
public static String read(String fileName, String encoding) {
StringBuffer sb = new StringBuffer();
try {
FileInputStream fis = new FileInputStream(fileName);
InputStreamReader isr = new InputStreamReader(fis, encoding);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
sb.append(line);
sb.append(SEP);
}
br.close();
isr.close();
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString();
}
public static List<String> readAsLines(String fileName, String encoding) {
List<String> lines = new ArrayList<String>();
try {
FileInputStream fis = new FileInputStream(fileName);
InputStreamReader isr = new InputStreamReader(fis, encoding);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
lines.add(line);
}
br.close();
isr.close();
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
return lines;
}
public static void write(String fileContent, String fileName, String encoding) {
try {
FileOutputStream fos = new FileOutputStream(fileName);
OutputStreamWriter osw = new OutputStreamWriter(fos, encoding);
osw.write(fileContent);
osw.flush();
osw.close();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}