Java流文件读写操作.docx
- 文档编号:29593863
- 上传时间:2023-07-25
- 格式:DOCX
- 页数:14
- 大小:124.62KB
Java流文件读写操作.docx
《Java流文件读写操作.docx》由会员分享,可在线阅读,更多相关《Java流文件读写操作.docx(14页珍藏版)》请在冰豆网上搜索。
Java流文件读写操作
Java流
一、流的分类
•按数据流动方向
–输入流:
只能从中读取字节数据,而不能向其写出数据
–输出流:
只能向其写入字节数据,而不能从中读取数据
•按照流所处理的数据类型
–字节流:
用于处理字节数据。
–字符流:
用于处理Unicode字符数据。
•按照流所处理的源
–节点流:
从/向一个特定的IO设备读/写数据的流。
(低级流)
–处理流:
对已存在的流进行连接和封装的流。
(高级流)
二、缓冲流
•缓冲流要“套接”在相应的节点流之上,对读写的数据提供了缓
冲的功能,提高了读写的效率,同时增加了一些新的方法。
•J2SDK提供了四种缓存流:
–BufferedReader
–BufferedWriter
–BufferedInputStreams
–BufferedOutputStream
•缓冲输入流支持其父类的mark()和reset()方法:
–mark()用于“标记”当前位置,就像加入了一个书签,可以使用reset()方法返回这个标记重新读取数据。
•BufferedReader提供了readLine()方法用于读取一行字符串(以\r或\n分隔)。
•BufferedWriter提供了newLine()用于写入一个行分隔符。
•对于输出的缓冲流,写出的数据会先在内存中缓存,使用flush()方法将会使内存中的数据立刻写出。
三、类层次
3.1、InputStream类层次
3.2、OutputStream类层次
3.3、Reader类层次
3.4、Writer类层次
四、常用的字符流与字节流的转化
说明:
1.字节流用于读写诸如图像数据之类的原始字节流。
2.字符流用于读写诸如文件数据之类的字符流。
3.低级流能和外设交流。
4.高级流能提高效率。
5.InputStreamReader是字节流通向字符流的桥梁。
6.OutputStreamWriter是字符流通向字节流的桥梁。
五、代码实例
5.1、常用读文件:
/**
*以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。
*@paramfileName:
文件的名
*/
publicstaticvoidreadFileByBytes(StringfileName){
Filefile=newFile(fileName);
InputStreamin=null;
try{
logger.debug("以字节为单位读取文件内容,一次读多个字节:
");
/*一次读多个字节*/
byte[]tempbytes=newbyte[100];
intbyteread=0;
in=newFileInputStream(file);
/*读入多个字节到字节数组中,byteread为一次读入的字节数*/
while((byteread=in.read(tempbytes))!
=-1){
logger.debug(tempbytes);
logger.debug(0);
logger.debug(byteread);
}
}catch(Exceptione1){
logger.error("读取文本文件异常",e1);
}finally{
if(in!
=null){
try{
in.close();
}catch(IOExceptione1){
logger.error("读取文本文件异常",e1);
}
}
}
}
/**
*以字符为单位读取文件,常用于读文本,数字等类型的文件
*@paramfileName:
文件名
*/
publicstaticvoidreadFileByChars(StringfileName){
Readerreader=null;
try{
logger.debug("以字符为单位读取文件内容,一次读多个字节:
");
/*一次读多个字符*/
char[]tempchars=newchar[100];
intcharread=0;
if(fileName!
=null&&!
"".equals(fileName)){
reader=newInputStreamReader(newFileInputStream(fileName));
/*读入多个字符到字符数组中,charread为一次读取字符数*/
while((charread=reader.read(tempchars))!
=-1){
/*对于windows下,rn这两个字符在一起时,表示一个换行。
*/
/*但如果这两个字符分开显示时,会换两次行。
*/
/*因此,屏蔽掉r,或者屏蔽n。
否则,将会多出很多空行。
*/
if((charread==tempchars.length)
&&(tempchars[tempchars.length-1]!
='r')){
logger.debug(tempchars);
}else{
for(inti=0;i if(tempchars[i]=='r'){ continue; }else{ logger.debug(tempchars[i]); } } } } } }catch(Exceptione1){ logger.error("读取文本文件异常",e1); }finally{ if(reader! =null){ try{ reader.close(); }catch(IOExceptione1){ logger.error("读取文本文件异常",e1); } } } } /** *以行为单位读取文件,常用于读面向行的格式化文件 *@paramfileName: 文件名 */ publicstaticList List if(fileName! =null&&! "".equals(fileName)){ Filefile=newFile(fileName); BufferedReaderreader=null; try{ logger.debug("以行为单位读取文件内容,一次读一整行: "); reader=newBufferedReader(newFileReader(file)); StringtempString=null; /*一次读入一行,直到读入null为文件结束*/ while((tempString=reader.readLine())! =null){ logger.debug(tempString); list.add(tempString); } }catch(IOExceptione){ logger.error("读取文本文件异常",e); }finally{ if(reader! =null){ try{ reader.close(); }catch(IOExceptione1){ logger.error("读取文本文件异常",e1); } } } } returnlist; } 5.2、常用写文件: /** *把内容写到文件 *@paramfilePathName文件名 *@paramList */ publicstaticbooleanwriterFile(StringfilePathName,Stringcontent){ booleanflag=false; OutputStreamWriterosw=null; try{ if(filePathName! =null&&! "".equals(filePathName)){ osw=newOutputStreamWriter(newFileOutputStream(filePathName)); } }catch(FileNotFoundExceptione1){ flag=false; e1.printStackTrace(); } if(osw! =null){ BufferedWriterbw=newBufferedWriter(osw); try{ if(content! =null&&! "".equals(content)){ bw.write(content); flag=true; } }catch(IOExceptione){ flag=false; e.printStackTrace(); }finally{ try{ bw.close(); osw.close(); }catch(IOExceptione){ flag=false; e.printStackTrace(); } } } returnflag; } /** *把内容写到文件或追加到文件中 *@paramfilePathName文件名 *@paramList */ publicstaticbooleanwriterFileIsAppend(StringfilePathName,Stringcontent){ booleanflag=false; OutputStreamWriterosw=null; try{ if(filePathName! =null&&! "".equals(filePathName)){ osw=newOutputStreamWriter(newFileOutputStream(filePathName,true)); } }catch(Exceptione1){ flag=false; e1.printStackTrace(); } if(osw! =null){ BufferedWriterbw=newBufferedWriter(osw); try{ if(content! =null&&! "".equals(content)){ bw.write(content); flag=true; } }catch(IOExceptione){ flag=false; e.printStackTrace(); }finally{ try{ bw.close(); osw.close(); }catch(IOExceptione){ flag=false; e.printStackTrace(); } } } returnflag; } 六、RandomAccessFile 6.1: 说明 •RandomAccessFile是一种特殊的文件流,可以用它在文件的任何地方查找或者插入数据 •RandomAccessFile同时实现了DataInput和DataOutput接口,所以可以用它来读/写文件 •构造器: ---RandomAccessFile(java.io.Filef,Stringmode) ---RandomAccessFile(Stringfile,Stringmode) 6.2: 代码示例 /** *Description: 读取文件最后一行内容 *@paramfileName文件路径名+文件名 */ publicstaticStringgetfinalLineData(StringpathName){ RandomAccessFileraf=null; StringlastLine=""; try{ raf=newRandomAccessFile(pathName,"r"); longlen=raf.length(); if(len! =0L){ longpos=len-1; while(pos>0){ pos--; raf.seek(pos); if(raf.readByte()=='\n'){ lastLine=raf.readLine(); break; } } } }catch(Exceptione){ e.printStackTrace(); }finally{ if(raf! =null){ try{ raf.close(); }catch(IOExceptione1){ e1.getStackTrace(); } } } returnlastLine; } 七、注意事项 1、将高级流“套接“在低级流上,这样起到缓冲的作用可以提高效率。 2、将使用完的流关闭,释放资源。 3、读取如图片、声音、影像等文件用字节流。 4、读取如文本等文件用字符流。 5、根据具体的数据格式选择合适的读写方法、如按行读写、按照字节读写等。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 文件 读写 操作