a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 118|回复: 0

[基础知识] Java学习知识点要求(16)

[复制链接]
发表于 2012-8-4 12:37:27 | 显示全部楼层 |阅读模式
Java学习知识点要求(16)  t- F6 g' m) f& L. t6 F4 c# {
24、基于字符文件读写(FileReader、FileWriter)、基于字节文件读写(InputStream、FileInputStream、FileOutputStream、DataOutputStream、DataInputStream)、随机文件读写(RandomAccessFile)。4 j' g7 Q- U; d
(1)字节输入流类-InputStream字节输入流类的作用就是从外部设备获取字节数据到计算机内存中。
. O+ |* e/ i" O# M! x2 Y抽象类InputStream中的方法" g: ?) z' @; P
①int read()从输入流的当前位置读取输入流的下一个字节,返回读入的字节数据;如果已经读取到输入流的末端,返回-1。4 P% v- n# W% k" c% F
②int read(byte b[ ] )将输入流读到字节数组中,返回读入的字节数! G1 G( v3 V% z0 x! w
③int read(byte b[ ],int off,int len )从输入流中读取len个字节到字节数组b[]中,读到的第一个字节放在off处,返回读入的字节数;如果off+len大于b.length,或者off和len中有一个是负数,那么回抛出IndexOutOfBoundsException。
: U8 c- B! N/ j# B# `3 d④long skip(long n )从输入流中跳过n个字节,返回跳过的字节数;执行skip()方法后,接着使用read()方法将会读取第n+1个字节。
3 L- M4 U" e1 ~4 M* g  g1 M% H⑤abstract void close()关闭输入流,释放资源。对流的读取结束后应显示地调用该方法。
" C( {1 O& w- }8 a# d⑥mark()方法:给流的当前位置做一个标记! E, @/ |- j* L6 j* ?% ?
⑦reset()方法:使流回到上次使用mark()方法后的标记处。6 T' d  Y. l/ N% ~: G( U
(2)字节输出流类-OutputStream 字节输出流类的作用就是将暂存在计算机内存中的数据输出到外部设备。
$ r1 X9 s9 b8 J抽象类OutputStream的方法3 L: W1 ~% M2 l$ [2 P' @% j
①void write(int b )将整数b的低8位写入输出流
$ q3 C5 o6 F! \1 P0 Y7 l) n7 A②void write(byte b[ ] )将字节数组写入输出. B4 L& L! q% h  ?( ^4 I" P* t; y
③void write(byte b[ ],int off,int len )从字节数组b的off处开始向输出流写入len个字节
6 x4 Q1 X4 S5 `1 m1 Q2 `0 G3 e$ q④abstract void flush()强制将输出流保存在缓冲区中的数据写入目标数据源
5 }3 w" C. S9 `# ], {  t⑤abstract void close()先调用flush()方法,然后关闭输出流,释放资源
! ]: X1 M7 h! e9 m+ ~使用输入输出时,可能会出现异常,通常要使用Java的异常处理机制。
4 {3 P7 h" a, M0 p7 f8 J% [try{9 ]9 {0 ]& E. [) e, T8 Y
         //与流操作相关的代码9 H% e6 F0 R; u
}catch(IOException e){
& ~- k( S2 V8 w: ?& a     //处理异常的代码/ m9 i5 ?$ \4 j# L) A3 X& d, C
}finally{  e' z+ v, e! G* O9 W. }
     xxx.close();
3 R% n; v8 T* t5 v}% }5 g2 S6 q& X  {- `0 Y  @
(3)对文件进行读写
8 K' E! V" G8 K$ m  @6 d方式一:使用基于字节的流类进行操作,即使用FileInputStream和FileOutputStream;" s+ a# {+ C( i2 q
方式二:使用基于字符的流类进行操作,即使用FileReader和FileWriter(推荐方式)
, J) X9 R( x" S& n①FileInputStream类的对象可以从文件中读取字节。+ ^( m( }) i/ ]% W% x3 x
构造方法:FileInputStream(String filename)throws FileNotFoundException
: }  O- G4 t5 c' T% VFileInputStream(File file)throws FileNotFoundException
6 K" E( [4 J. `2 [) o例:FileInputStream in1=new FileInputStream(”c:\hello.java”);
" Q9 p8 m2 |, X例:File f=new File(“myfile.dat”);FileInputStream in2=new FileInputStream(f);* b4 `7 ^  T- Y& O# a+ B, n6 b8 ~
FileInputStream类的方法
: H9 K' t) ?- X3 j6 y& @read():从此输入流中读取一个数据字节。
6 S2 U' C" l+ G* P$ X0 ?read(byte[] b):从此输入流中将最多 b.length 个字节的数据读入一个字节数组中。
6 t0 }* q8 x8 H" @" Yread(byte[] b, int off, int len):从此输入流中将最多 len 个字节的数据读入一个字节数组中。# |! {$ Y6 M& n  S: l  O
close():关闭此文件输入流并释放与此流有关的所有系统资源。
8 |/ Y  p% G: H$ i. V+ }: Q②FileOutputStream类 ( I. Y. f7 F& b! P
构造方法:
; B6 o$ l3 l6 U2 gFileOutputStream(String filename)throws FileNotFoundException- n4 `5 o1 F3 Z+ i; h6 P
FileOutputStream(File file)throws FileNotFoundException
: j. [) ]3 F4 e9 y/ ^0 U  gFileOutputStream(String filename,boolean append)throws FileNotFoundException/ v5 P- C- T- x2 v3 K' ]8 |
常用方法:
2 F! s" y7 J9 t  _% G. r/ Owrite(byte[] b):将 b.length 个字节从指定字节数组写入此文件输出流中。
# t6 o% n2 ^& o8 v; l, iwrite(byte[] b, int off, int len):将指定字节数组中从偏移量 off 开始的 len 个字节写入此文件输出流。1 a- p" j, j; W! i0 `( f
write(int b):将指定字节写入此文件输出流。
% U. ^, Z2 m# O4 F1 H1 D# x0 Q(3)数据字节输入流DataInputStream类和数据字节输出流DataOutputStream类提供直接读或写基本数据类型数据的方法。 2 T* j8 R6 B( ^& V# a# _. A7 D
①DataInputStream类以与机器无关的方式从一个输入流中读取Java的基本数据类型的数据,所读数据应是由DataOutputStream对象写入。 9 G6 [1 N) {/ c$ q7 Z
DataInputStream类的定义如下:6 H, s" F$ @& K! B
public class DataInputStream extends FilterInputStream implements DataInput{//构造方法6 G0 t' z$ l" p+ k% y2 V- l
public DataInputStream(InputStream in)//成员方法, {% V8 [5 e# r, |2 M
public final int skipBytes(int n) throws IOException) h) \" C4 a6 h- p
public final boolean readBoolean() throws EOFException,IOException( J# \  A! J0 C; Q
public final byte readBytes() throws EOFException,IOException
# n9 f! B) H4 |# x+ I- Hpublic final char readChar() throws EOFException,IOException7 P3 [" q3 A$ k  b
public final int readInt() throws EOFException,IOException
; f' J, P' ^) K8 g7 u; npublic final double readDouble() throws EOFException,IOException
7 s* l+ I( G/ ipublic final String readUTF() throws EOFException,IOException. r+ @) H8 f2 k2 C, c( W% Q
}( o4 M: v5 X% n3 O# Y  O/ Z
②DataOutputStream定义形式:
: D- v4 j# p) R& Xpublic class DataOutputStream extends FilterOutputStream implements DataOutput# X! d# k% Q& k3 r  M" }
DataOutputStream类提供的构造方法如下:6 ]* `4 Z0 m1 `/ o5 J
public DataOutputStream(OutputStream out):参数out为底层输出流,通常与具体的设备相关联。 ; z1 |' e" _* Q' i* U, m
常用方法:; P# O& n8 b) }( \% u1 U
close()
9 C6 p; O3 i( Q5 twriteByte()" n: `7 U$ }* m7 M" E5 {$ P
writeInt()" f* p, O- P( M! s
writeUTF()//采用UTF-8编码的字符串。这使字符串格式独立于平台。4 Y" V# A! i( Q/ I
writeFloat()
3 Y1 F$ l4 ]% y+ U' Q% ^(4)Reader类的方法8 T" X1 Y$ f2 d( Z7 p* i
字符输入流类定义的方法:
/ N( @' Z$ t' h2 C% E1 iabstract void close()关闭输入流,如果试图继续读取,将产生一个IOException* M1 S1 [7 U, F! o8 U4 I0 i6 d
int read()从输入流读取一个字符。如果到达文件结尾,则返回-1
" n7 X9 I3 d* P. v1 }6 jint read(char buf[ ])从输入流中将指定个数的字符读入到数组buf中,并返回读取成功的实际字符数目。如果到达文件结尾,则返回-1' X8 ]9 ~0 b( o  c; g$ U
abstract int read(char buf[ ],int off,int len)从输入流中将len个字符从buf[off]位置开始读入到数组buf中,并返回读取成功的实际字符数目。如果到达文件结尾,则返回-1
5 @4 Q& ?% _$ W$ n. E5 A/ aboolean ready()判断流是否做好读的准备& _) l* I3 ~1 D& Q; o: q/ h/ [/ M
long skip(long n)跳过输入中的n个字符,返回实际跳过的字符数目
3 p8 e4 z" N4 L; V* a) Q" K6 NFileReader类9 Y. A' K: B% }
在Java API中给出FileReader类的定义如下:) k- z; Z3 ]; a5 F2 O" u- [  n
public class FileReader extends InputStreamReader{
7 k# ~* ?; T" ipublic FileReader(String fileName)throws FileNotFoundException, W- x$ F3 W  a! u8 o
         public FileReader(File file)throws FileNotFoundException
. D  ]% R. p' j* S}5 w8 B4 I2 u4 `0 ?8 F1 }: s. o
(5)Writer类4 u* s) O0 h* Q/ w* @& X
字符输出流类定义的方法:
: C# ]. b3 v2 S% |7 I6 M8 Jabstract void close()关闭输出流,如果试图继续写入,将产生一个IOException
( G1 K1 U8 G9 v; B; M- t9 [* Vabstract void flush()强制输出流中的字符输出到指定的输出装置5 I4 d, S, J3 }4 J! r$ `' D
void write(int ch)写入一个字符到流中' T# [: e8 b  s3 c8 e) ?2 d3 r* X
void write(char buf[ ])将一个完整的字符数组写入到输出流中5 S3 {5 l) y: t9 Q+ D
abstract void write(char buf[ ],int off,int len)从数组buf的buf[off]位置开始,写入len个字符到输出流中
3 z0 I7 B% Z; hvoid write(string str)写入一个字符串到输出流中. y3 t+ Y/ D1 S% u& `1 j
void write(string str,int off,int len)写入一个字符串到输出流中,off为字符串的起始位置,len为字符串的长度,即写入的字符数5 {2 }6 x2 j9 L3 i" q
FileWriter类 6 F! I  p, c4 ]3 R
Java API给出的FileWriter类的定义如下:
7 f% [; V0 Z2 u; w6 Z5 spublic class FileWriter extends OutputStreamWriter{//部分构造方法
+ [! K. P: r5 @9 Q9 ?public FileWriter(File file)throws IOException
" |  Q5 [5 A# u# u, s; q, G6 k+ Spublic FileWriter(File file,Boolean append)throws IOException
5 u* ?4 x$ I( opublic FileWriter(String fileName)throws IOException
# w2 ^1 G1 h( M! e' Q' y% tpublic FileWriter(String filename,Boolean append)throws IOException
, e3 y# c7 M) z  s(6)RandomAccessFile类
) m* |& s' x1 x1 w) T6 ]①RandomAccessFile类的两个特点:
& ]' Z0 {4 Z/ ]; Q对一个文件可以同时进行既读又写的操作。8 C' E9 s. i7 ]6 [
可以在文件中的指定位置读取数据或写入数据。+ k) y4 o' _* F+ j# {- ?6 @
②RandomAccessFile类的声明为
0 k3 L- E+ \  I* `# o) O; h2 x1 gpublic class RandomAccessFile extends Object implements DataInput, DataOutput
0 n; S4 S# F: I③RandomAccessFile类有两个构造方法,可以用来创建RandomAccessFile类对象:RandomAccessFile(File file, String mode)
/ X9 K( M' c, VRandomAccessFile(String name, String mode)8 o$ P" S' z. @* k0 y, ?7 r
第一个参数是File对象(或字符串),指定了文件名。第二个参数mode指明了访问模式。: b4 N/ Q& D' c/ T+ p7 V% j. n( ]
④要想实现对文件内容进行随机的读/写,文件指针是重要的,Java中提供了如下的方法对文件指针进行操作:
% _5 l2 A/ g( E4 m, j3 i% m' xpublic long getFilePointer( )  //获得当前的文件指针。; y+ m% O- n1 \" Q: x
public void seek( long pos )  //移动文件指针到指定的位置。
! {$ G: I0 P* u" A! ppublic int skipBytes( int n )  //使文件指针向前移动指定的n个字节。并返回指针实际移动的字节数。
! k6 ^0 _& G0 H6 r6 I; @3 r⑤读写数据的方法:
( j7 C; B9 ~8 _. m: Ypublic int read()  //读取一个数据字节,以整数形式返回此字节。
0 f. d! e' g0 `; T0 z public long length()  //返回此文件的长度。
  Z# k, W9 c' u' npublic final String readUTF()  //从文件中读取一个字符串。
, u2 F  |' P# U. @" g public final String readLine()  //从此文件读取文本的下一行。
% z9 V/ d8 f, }3 e: jpublic final boolean readBoolean()  //从此文件读取一个 boolean。; i1 }' O. I; I7 ~
public final void writeUTF(String str)  //使用 modified UTF-8 编码以与机器无关的方式将一个字符串写入该文件。
6 L" J# B" M$ D! Y1 Zpublic void write(int b)  //从当前文件指针开始写入指定的字节+ k- Y! F% T& b  x7 h
public final void writeChar(int v)  //按双字节值从文件指针的当前位置开始将 char 写入文件。 * S6 V% ^* P. U* M+ z% q. X
public final void writeChars(String s)  //按字符序列将一个字符串写入该文件。
( v6 D) R" D$ [0 }* R4 b% k6 n! hpublic final void writeBoolean(Boolean v)  //按单字节值将 boolean 写入该文件。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-7 04:22 , Processed in 0.171607 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表