当前位置: 代码迷 >> Web前端 >> 读取源文件的各种形式
  详细解决方案

读取源文件的各种形式

热度:366   发布时间:2012-08-24 10:00:21.0
读取流文件的各种形式

public?class?ReadFromFile?{
????
/**
?????*?以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。
?????
*/
????
public?static?void?readFileByBytes(String?fileName)?{
????????File?file?
=?new?File(fileName);
????????InputStream?in?
=?null;
????????
try?{
????????????System.out.println(
"以字节为单位读取文件内容,一次读一个字节:");
????????????
//?一次读一个字节
????????????in?=?new?FileInputStream(file);
????????????
int?tempbyte;
????????????
while?((tempbyte?=?in.read())?!=?-1)?{
????????????????System.out.write(tempbyte);
????????????}
????????????in.close();
????????}?
catch?(IOException?e)?{
????????????e.printStackTrace();
????????????
return;
????????}
????????
try?{
????????????System.out.println(
"以字节为单位读取文件内容,一次读多个字节:");
????????????
//?一次读多个字节
????????????byte[]?tempbytes?=?new?byte[100];
????????????
int?byteread?=?0;
????????????in?
=?new?FileInputStream(fileName);
????????????ReadFromFile.showAvailableBytes(in);
????????????
//?读入多个字节到字节数组中,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)?{

       e1.printStackTrace();
????????????????}
????????????}
????????}
????}

????
/**
?????*?以字符为单位读取文件,常用于读文本,数字等类型的文件
?????
*/
????
public?static?void?readFileByChars(String?fileName)?{
????????File?file?
=?new?File(fileName);
????????Reader?reader?
=?null;
????????
try?{
????????????System.out.println(
"以字符为单位读取文件内容,一次读一个字节:");
????????????
//?一次读一个字符
????????????reader?=?new?InputStreamReader(new?FileInputStream(file));
????????????
int?tempchar;
????????????
while?((tempchar?=?reader.read())?!=?-1)?{
????????????????
//?对于windows下,\r\n这两个字符在一起时,表示一个换行。
????????????????
//?但如果这两个字符分开显示时,会换两次行。
????????????????
//?因此,屏蔽掉\r,或者屏蔽\n。否则,将会多出很多空行。
????????????????if?(((char)?tempchar)?!=?'\r')?{
????????????????????System.out.print((
char)?tempchar);
????????????????}
????????????}
????????????reader.close();
????????}?
catch?(Exception?e)?{
????????????e.printStackTrace();
????????}
????????
try?{
????????????System.out.println(
"以字符为单位读取文件内容,一次读多个字节:");
????????????
//?一次读多个字符
????????????char[]?tempchars?=?new?char[30];
????????????
int?charread?=?0;
????????????reader?
=?new?InputStreamReader(new?FileInputStream(fileName));
????????????
//?读入多个字符到字符数组中,charread为一次读取字符数
????????????while?((charread?=?reader.read(tempchars))?!=?-1)?{
????????????????
//?同样屏蔽掉\r不显示
????????????????if?((charread?==?tempchars.length)
????????????????????????
&&?(tempchars[tempchars.length?-?1]?!=?'\r'))?{
????????????????????System.out.print(tempchars);
????????????????}?
else?{
????????????????????
for?(int?i?=?0;?i?<?charread;?i++)?{
????????????????????????
if?(tempchars[i]?==?'\r')?{
????????????????????????????
continue;
????????????????????????}?
else?{
????????????????????????????System.out.print(tempchars[i]);
????????????????????????}
????????????????????}
????????????????}
????????????}

????????}?
catch?(Exception?e1)?{
????????????e1.printStackTrace();
????????}?
finally?{
????????????
if?(reader?!=?null)?{
????????????????
try?{
????????????????????reader.close();
????????????????}?
catch?(IOException?e1)?{

      ?? e1.printStackTrace();
????????????????}
????????????}
????????}
????}

????
/**
?????*?以行为单位读取文件,常用于读面向行的格式化文件
?????
*/
????
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)?{

  ????????????? e1.printStackTrace();

????????????????}
????????????}
????????}
????}

????
/**
?????*?随机读取文件内容
?????
*/
????
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)?{

???????????????????? e1.printStackTrace();
????????????????}
????????????}
????????}
????}

????
/**
?????*?显示输入流中还剩的字节数
?????
*/
????
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);
????}
}

?

?

?

ublic?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);
????}
}

  相关解决方案