java读取文件总结(转载)
1、按字节读取文件内容
2、按字符读取文件内容
3、按行读取文件内容
4、随机读取文件内容
?
1、按字节读取文件内容
public?class?ReadFromFile?{
????/**
?????*?以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。
?????*/
????public?static?void?readFileByBytes(String?fileName)?{
????????File?file?=?new?File(fileName);
????????InputStream?in?=?null;
????????try?{
??????????? //?一次读一个字节
????????????in?=?new?FileInputStream(file);
????????????int?tempbyte;
????????????while?((tempbyte?=?in.read())?!=?-1)?{
????????????????System.out.write(tempbyte);
????????????}
????????????in.close();
????????}?catch?(IOException?e)?{
????????????e.printStackTrace();
????????????return;
????????}
????????try?{
??????????? //?一次读多个字节
????????????byte[]?tempbytes?=?new?byte[100];
????????????int?byteread?=?0;
????????????in?=?new?FileInputStream(fileName);
???????????//?读入多个字节到字节数组中,byteread为一次读入的字节数
????????????while?((byteread?=?in.read(tempbytes))?!=?-1)?{
????????????????System.out.write(tempbytes,?0,?byteread);
????????????}
????????}?catch?(Exception?e1)?{
????????????e1.printStackTrace();
????????}?finally?{
????????????if?(in?!=?null)?{
????????????????try?{
????????????????????in.close();
????????????????}?catch?(IOException?e1)?{
????????????????}
????????????}
????????}
????}
?
2、按字符读取文件内容
InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,否则可能接受平台默认的字符集。
每次调用 InputStreamReader 中的一个 read() 方法都会导致从基础输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从基础流读取更多的字节,使其超过满足当前读取操作所需的字节。
为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。例如:
BufferedReader in = new BufferedReader(new FileReader("foo.in"));
?将缓冲指定文件的输入。如果没有缓冲,则每次调用 read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。
????/**
?????*?以行为单位读取文件,常用于读面向行的格式化文件
?????*/
????public?static?void?readFileByLines(String?fileName)?{
????????File?file?=?new?File(fileName);
????????BufferedReader?reader?=?null;
????????try?{
????????????System.out.println("以行为单位读取文件内容,一次读一整行:");
????????????reader?=?new?BufferedReader(new?FileReader(file));
????????????String?tempString?=?null;
????????????int?line?=?1;
????????????//?一次读入一行,直到读入null为文件结束
????????????while?((tempString?=?reader.readLine())?!=?null)?{
????????????????//?显示行号
????????????????System.out.println("line?"?+?line?+?":?"?+?tempString);
????????????????line++;
????????????}
????????????reader.close();
????????}?catch?(IOException?e)?{
????????????e.printStackTrace();
????????}?finally?{
????????????if?(reader?!=?null)?{
????????????????try?{
????????????????????reader.close();
????????????????}?catch?(IOException?e1)?{
????????????????}
????????????}
????????}
????}
?
4、随机读取文件内容
????/**
?????*?随机读取文件内容
?????*/
????public?static?void?readFileByRandomAccess(String?fileName)?{
????????RandomAccessFile?randomFile?=?null;
????????try?{
????????????System.out.println("随机读取一段文件内容:");
????????????//?打开一个随机访问文件流,按只读方式
????????????randomFile?=?new?RandomAccessFile(fileName,?"r");
????????????//?文件长度,字节数
????????????long?fileLength?=?randomFile.length();
????????????//?读文件的起始位置
????????????int?beginIndex?=?(fileLength?>?4)???4?:?0;
????????????//?将读文件的开始位置移到beginIndex位置。
????????????randomFile.seek(beginIndex);
????????????byte[]?bytes?=?new?byte[10];
????????????int?byteread?=?0;
????????????//?一次读10个字节,如果文件内容不足10个字节,则读剩下的字节。
????????????//?将一次读取的字节数赋给byteread
????????????while?((byteread?=?randomFile.read(bytes))?!=?-1)?{
????????????????System.out.write(bytes,?0,?byteread);
????????????}
????????}?catch?(IOException?e)?{
????????????e.printStackTrace();
????????}?finally?{
????????????if?(randomFile?!=?null)?{
????????????????try?{
????????????????????randomFile.close();
????????????????}?catch?(IOException?e1)?{
????????????????}
????????????}
????????}
????}
????/**
?????*?显示输入流中还剩的字节数
?????*/
????private?static?void?showAvailableBytes(InputStream?in)?{
????????try?{
????????????System.out.println("当前字节输入流中的字节数为:"?+?in.available());
????????}?catch?(IOException?e)?{
????????????e.printStackTrace();
????????}
????}
????public?static?void?main(String[]?args)?{
????????String?fileName?=?"C:/temp/newTemp.txt";
????????ReadFromFile.readFileByBytes(fileName);
????????ReadFromFile.readFileByChars(fileName);
????????ReadFromFile.readFileByLines(fileName);
????????ReadFromFile.readFileByRandomAccess(fileName);
????}
}
5、将内容追加到文件尾部
public?class?AppendToFile?{
????/**
?????*?A方法追加文件:使用RandomAccessFile
?????*/
????public?static?void?appendMethodA(String?fileName,?String?content)?{
????????try?{
????????????//?打开一个随机访问文件流,按读写方式
????????????RandomAccessFile?randomFile?=?new?RandomAccessFile(fileName,?"rw");
????????????//?文件长度,字节数
????????????long?fileLength?=?randomFile.length();
????????????//将写文件指针移到文件尾。
????????????randomFile.seek(fileLength);
????????????randomFile.writeBytes(content);
????????????randomFile.close();
????????}?catch?(IOException?e)?{
????????????e.printStackTrace();
????????}
????}
????/**
?????*?B方法追加文件:使用FileWriter
?????*/
????public?static?void?appendMethodB(String?fileName,?String?content)?{
????????try?{
????????????//打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件
????????????FileWriter?writer?=?new?FileWriter(fileName,?true);
????????????writer.write(content);
????????????writer.close();
????????}?catch?(IOException?e)?{
????????????e.printStackTrace();
????????}
????}
????public?static?void?main(String[]?args)?{
????????String?fileName?=?"C:/temp/newTemp.txt";
????????String?content?=?"new?append!";
????????//按方法A追加文件
????????AppendToFile.appendMethodA(fileName,?content);
????????AppendToFile.appendMethodA(fileName,?"append?end.?\n");
????????//显示文件内容
????????ReadFromFile.readFileByLines(fileName);
????????//按方法B追加文件
????????AppendToFile.appendMethodB(fileName,?content);
????????AppendToFile.appendMethodB(fileName,?"append?end.?\n");
????????//显示文件内容
????????ReadFromFile.readFileByLines(fileName);
????}
}
来源:http://www.cnblogs.com/lovebread/archive/2009/11/23/1609122.html