对字符型的处理,二进制的暂时不考虑。
1.readFile方法,主要采用FileReader来读取文件,不能指定编码
2.readFileByInputStream方法,采用InputStreamReader来读取文件,可以指定编码
3.readFileByBufferedReader方法,采用BufferedReader来读取文件,不可以指定编码
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.InputStreamReader;
/**
* 测试读取文件
*
* @author rey2008
*
*/
public class TestReadFile {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
String sFilePath = "D://test//test_read.txt";
readFileByBufferedReader(sFilePath);
}
/**
* 以字符读取文件,采取策略 File->FileReader->char[]
* FileReader的读取过程:FileReader->FileInputStream(不能指定编码,
* 指定编码是在InputStreamReader中指定的,FileReader正好跳过了指定编码的一步)
*
* @param _sFilePath
*/
private static void readFile(String _sFilePath) throws Exception {
File aFile = new File(_sFilePath);
if (!aFile.exists()) {
throw new Exception("路径[" + _sFilePath + "]对应的文件不存在!");
}
FileReader aFileReader = null;
StringBuffer sbContent = new StringBuffer();
try {
// 定义缓冲区
char[] fileBuffer = new char[1024];
aFileReader = new FileReader(aFile);
while (aFileReader.read(fileBuffer) != -1) {
sbContent.append(fileBuffer);
// 清空上次数据
fileBuffer = new char[1024];
}
} catch (Exception ex) {
if (aFileReader != null) {
aFileReader.close();
}
ex.printStackTrace();
}
// 打印文件内容
System.out.println("sbContent==" + sbContent);
}
/**
* 以字符读取文件,File->fileInputStream->InputStreamReader->chars
* 与直接用FileReader来读取不同的是,是可以指定流的编码
*
* @param _sFilePath
* @throws Exception
*/
private static void readFileByInputStream(String _sFilePath)
throws Exception {
File aFile = new File(_sFilePath);
if (!aFile.exists()) {
throw new Exception("路径[" + _sFilePath + "]对应的文件不存在!");
}
// 声明变量
FileInputStream aFileInputStream = null;
InputStreamReader aInputStreamReader = null;
StringBuffer sbContent = new StringBuffer();
try {
// FileInputStream
aFileInputStream = new FileInputStream(aFile);
// InputStreamReader
aInputStreamReader = new InputStreamReader(aFileInputStream,
"UTF-8");
// 定义缓冲区
char[] fileBuffer = new char[1024];
while (aInputStreamReader.read(fileBuffer) != -1) {
sbContent.append(fileBuffer);
// 清空上次数据
fileBuffer = new char[1024];
}
} catch (Exception ex) {
if (aFileInputStream != null) {
aFileInputStream.close();
}
if (aInputStreamReader != null) {
aInputStreamReader.close();
}
ex.printStackTrace();
}
// 打印文件内容
System.out.println("sbContent==" + sbContent);
}
/**
* 以行读取文件,通过BufferedReader来做,一次读取一行
* file->fileReader->BufferedReader(无法指定编码)
*
* @param _sFilePath
* @throws Exception
*/
private static void readFileByBufferedReader(String _sFilePath)
throws Exception {
File aFile = new File(_sFilePath);
if (!aFile.exists()) {
throw new Exception("路径[" + _sFilePath + "]对应的文件不存在!");
}
// 定义缓冲区
BufferedReader aBufferedReader = null;
StringBuffer sbContent = new StringBuffer();
try {
aBufferedReader = new BufferedReader(new FileReader(aFile));
String sOneLine = null;
while ((sOneLine = aBufferedReader.readLine()) != null) {
sbContent.append(sOneLine);
}
} catch (Exception ex) {
if (aBufferedReader != null) {
aBufferedReader.close();
}
ex.printStackTrace();
}
// 打印文件内容
System.out.println("sbContent==" + sbContent);
}
// 读取二进制文件,采用InputStreamReader读取到byte[]缓冲区即可
}