对字符型的处理,二进制的暂时不考虑。 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[]缓冲区即可 }
|