您的位置:首页 > 编程语言 > Java开发

java中读取文件的方式

2010-05-13 19:46 323 查看
经常遇到java中读取文件的方式,有时候需要指定编码,有时候不需要指定编码,被搞的挺晕的,抽时间整理了一下java读取文件的方式,主要是对字符型的处理,二进制的暂时不考虑。

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[]<BR>
* 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<BR>
* 与直接用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来做,一次读取一行<Br>
* 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[]缓冲区即可

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: