- OutputStreamWriter 用于向本地文件中写入数据
- InputStreamReader 用于读取本地文件中的字节数据
- FileReader 用于读取本地文件中的字节数据
- FileWriter 用于向本地文件中写入数据
- BufferedReader 实现按行读取文件 & BufferedWriter 实现按行写入文件
- PrintWriter 实现按行写入文件
- 封装一个自己用的文件读取写入方法类
1 OutputStreamWriter 写入示例
// 实例化一个文件对象
String fileSrc = "/Users/hlc/www/test/t11.txt";
File file = new File(fileSrc);
//打开FileOutputStream文件字节输出流
FileOutputStream out = new FileOutputStream(file);
//打开OutputStreamWriter文件字符输出流,并设置文件字符编码
OutputStreamWriter osw = new OutputStreamWriter(out,"utf-8");
//调用write方法,写入数据
osw.write("写上几个字");
//刷新缓冲区数据
osw.flush();
//关闭输出流
osw.close();
out.close();
以上.
2 InputStreamReader读取示例
// 实例化一个文件对象
String fileSrc = "/Users/hlc/www/test/t11.txt";
File file = new File(fileSrc);
//打开FileInputStream 文件字节输入流
FileInputStream in = new FileInputStream(file);
//打开InputStreamReader 字符输入流,并设置编码方式
InputStreamReader isr = new InputStreamReader(in,"utf-8");
//获取文件大小
int len = (int) file.length();
//创建一个char数组,用于存放读取的字符
char[] buffer = new char[len];
//将文件内容读取到上一步创建好的char[] buffer中
isr.read(buffer,0,buffer.length);
//将buffer转换为字符串,并打印
String s = new String(buffer);
System.out.print(s);
以上,你可能感觉很麻烦,需要先实例出一个字节流,在实例出一个字符流, 我们可以使用FileWriter 和 FileReader 的方式来替代上述步骤
3 FileWriter写入方法演示
String fileSrc = "/Users/hlc/www/test/demo1.php";
File file = new File(fileSrc);
FileWriter fw = new FileWriter(file);
fw.write("FileWrite");
fw.flush();
fw.close();
4 FileReader读取方法演示
String fileSrc = "/Users/hlc/www/test/demo1.php";
File file = new File(fileSrc);
FileReader fr = new FileReader(file);
int len = (int) file.length();
char[] buffer = new char[len];
fr.read(buffer,0,len);
String s = new String(buffer);
System.out.print(s);
fr.close();
FileWriter 和 FileReader的缺陷是不能设定字符编码,默认为项目的字符编码
5 BufferedReader & BufferedWriter
如果需要按行读取与写入的话,可以使用BufferedReader与BufferedWriter
使用方法如下
// 实例化一个BufferedReader
// BufferedReader需要字符输入流做参数进行构造,而字符出入流需要文件字节输入流做参数进行构造,所以写成以下嵌套模式
BufferedReader br = new BufferedReader(
new InputStreamReader(
new FileInputStream("/Users/hlc/www/test/demo1.php")));
//实例化一个BufferedWriter
BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream("/Users/hlc/www/test/demo2.php")));
//定义一个line字符串,存放读取的行
String line ;
int i = 1;
// br.readLine() 每次读取一行, 读到null 结束读取
while((line = br.readLine())!=null){
System.out.println("行号:"+i+" "+line);
//写入一行数据
bw.write("行号:"+i+" "+line);
//写入换行
bw.newLine();
//缓冲刷新
bw.flush();
i++;
}
//关闭流
br.close();
bw.close();
6 上例 BufferedWriter 实例化的时候很繁琐,可以使用PrintWriter 替代
简单例子
//实例化
PrintWriter pw = new PrintWriter("/Users/hlc/www/test/demo2.php");
//写入一行数据
pw.println(line);
pw.flush();
修改上例
BufferedReader br = new BufferedReader(
new InputStreamReader(
new FileInputStream("/Users/hlc/www/test/demo1.php")));
PrintWriter pw = new PrintWriter("/Users/hlc/www/test/demo2.php");
String line ;
int i = 1;
while((line = br.readLine())!=null){
System.out.println("行号:"+i+" "+line);
pw.println(line);
pw.flush();
i++;
}
br.close();
pw.close();
7 最后 封装一个个人用的io类
package com.demo;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
/**
* 文件写入与读取的类
* @author hlc
*
*/
public class HuuIOUtils {
/** 编码方式 */
public static String code = "utf-8";
/**
* 从文件中读取文件内容
* @param String filePath 文件路径
* @return String fileContent 文件内容
* @throws IOException
*/
public static String fileGetContents(String filePath) throws IOException{
// 实例化一个文件对象
String fileSrc = filePath;
File file = new File(fileSrc);
//打开FileInputStream 文件字节输入流
FileInputStream in = new FileInputStream(file);
//打开InputStreamReader 字符输入流,并设置编码方式
InputStreamReader isr = new InputStreamReader(in,code);
//获取文件大小
int len = (int) file.length();
//创建一个char数组,用于存放读取的字符
char[] buffer = new char[len];
//将文件内容读取到上一步创建好的char[] buffer中
isr.read(buffer,0,buffer.length);
//将buffer转换为字符串
String fileContent = new String(buffer);
return fileContent;
}
/**
* 向文件中写入字符串
* @param filePath 文件路径
* @param data 需要写入的内容
* @param append 是否需要追加写入
* @throws IOException
*/
public static void filePutContents(String filePath,String data,Boolean append) throws IOException{
// 实例化一个文件对象
String fileSrc = filePath;
File file = new File(fileSrc);
FileOutputStream out = null;
//打开FileOutputStream文件字节输出流
if(append == true){
out = new FileOutputStream(file,true);
}else{
out = new FileOutputStream(file);
}
//打开OutputStreamWriter文件字符输出流,并设置文件字符编码
OutputStreamWriter osw = new OutputStreamWriter(out,code);
//调用write方法,写入数据
osw.write(data);
//刷新缓冲区数据
osw.flush();
//关闭输出流
osw.close();
out.close();
}
}
使用
public static void main(String[] args) {
String filename = "demo/test.txt";
String content = "测试写入123ABC";
try {
HuuIOUtils.filePutContents(filename,content,true);
String res = HuuIOUtils.fileGetContents(filename);
System.out.println(res);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}