Java程序设计课件:流和文件_第1页
Java程序设计课件:流和文件_第2页
Java程序设计课件:流和文件_第3页
Java程序设计课件:流和文件_第4页
Java程序设计课件:流和文件_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

流和文件

Java程序设计教程本章主要内容Java的输入/输出流模型字符流的处理字节流的处理文件小结2024/2/4

2/3011.1Java的输入/输出流模型流:流是指在计算机的输入与输出之间运动的数据的序列,就像水管中的水流。2024/2/4

3/35输入流:代表从外设流入计算机的数据序列。输出流:代表从计算机流向外设的数据序列。2024/2/4

4/35通过流读取数据的基本流程2024/2/4

5/35Java中与相关的类2024/2/4

6/35

11.2字符流的处理2024/2/4

7/35ReaderBufferedReaderLineNumberReaderCharArrayReaderInputStreamReaderFileReaderFileterReaderPushbackReaderPipedReaderStringReader

11.2字符流的处理2024/2/4

8/35WriterBufferedWriterCharArrayWriterOutputStreamWriterFileWriterFileterWriterStringWriterPipedwriterPrinterWriterStringWriter字符输入相关的方法(read类)方法功能read()读取一个字符,返回范围在0~65535之间的int值,如果已到达流的末尾,则返回-1。read(char[]cbuf)将字符读入数组cbuf。返回读取的字符数,如果已到达流的末尾,则返回-1。read(CharBuffertarget)试图将字符读入指定的字符缓冲区。ready()判断是否准备读取此流。reset()重置该流。skip(longn)跳过n个字符。mark(intreadAheadLimit)标记流中的当前位置。close()关闭流并释放与之关联的所有资源。2024/2/4

9/35例11.1:从标准输入设备输入数据。importjava.io.*;publicclasseg111{ publicstaticvoidmain(String[]args){ Readerreader=newInputStreamReader(System.in); try{ for(inti=0;i<5;i++){//读入并输出前5个字符 charc=(char)reader.read(); System.out.print(""+c); } System.out.println(); reader.close(); }catch(IOExceptionex){ ex.printStackTrace(); } }}2024/2/4

10/35字符输出相关的方法(Writer)方法功能append(charc)将字符c添加到writer。append(CharSequencecsq)将字符序列添加到writer。append(CharSequencecsq,intstart,intend)将指定字符序列的子序列添加到writer。write(char[]cbuf)写入字符数组。write(intc)写入单个字符。write(Stringstr)写入字符串。write(Stringstr,intoff,intlen)写入字符串的某一部分。close()关闭此流,但要先刷新它。flush()刷新该流的缓冲。2024/2/4

11/35例11.2:把一个字符串写到文件h.txt中。importjava.io.*;publicclasseg11_2{publicstaticvoidmain(String[]args)throwsIOException{Stringstr=newString("HelloWorld!");Stringstr1="mynameisJava。";Writerfw=newFileWriter("h.txt");//创建一个h.txt文件

fw.write(str1);//通过管道把str1写入文件h.txtfw.append(str,6,12);//把World!写入到文件fw.close();}}2024/2/4

12/35其他字符流的使用常用的字符流类用于在数据流中需要完成字符和字节转换的情况。InputStreamReader类OutputStreamWriter类带有默认缓冲的字符输入流和输出流,通常用于整行字符或整段字符的读写

BufferedReader类BufferedWriter类以读写字符文件为目地的文件内容读写流FileReader类FileWriter类。2024/2/4

13/3511.3字节流的处理

2024/2/4

14/35InputStreamFileInputStreamPipedInputStreamFilterInputStreamLineNumberInputStreamDataInputStreamBufferedInputStreamPushbackInputStreamByteArrayInputStreamSquenceInputStreamStringBufferInputStreamObjectInputStreamOutputStreamFileOutputStreamPipedOutputStreamFilterOutputStreamDataOutputStreamBufferedOutputStreamPrintOutputStreamByteArrayOutputStreamObjectInputStreamInputStream类常用方法方法功能read()从输入流中读取数据的下一个字节,并返回0-255间的整数。read(byte[]b)从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中,并返回读取的字节数。skip(longn)跳过和丢弃此输入流中数据的n个字节available()返回输入流可以读取(或跳过)的字节数。close()关闭输入流并释放与该流关联的所有系统资源。reset()重置输入流的读取位置。mark(intreadlimit)在输入流中标记当前的位置。read(byte[]b,intoff,intlen)将输入流中读取len个数据存入数组b从索引off开始的位置,并返回读取字节数。2024/2/4

15/35OutputStream类常用方法方法功能write(byte[]b)将b.length个字节从b数组写入此输出流。flush()刷新输出流并强制写出所有缓冲的输出字节。write(byte[]b,intoff,intlen)将b数组中偏移量off开始的len个字节写入输出流。write(intb)将b个的字节写入此输出流。close()关闭输出流并释放与此流有关的所有系统资源。2024/2/4

16/35例11.5:通过InputStream和OutputStream复制图形文件importjava.io.*;publicclasseg115{ publicstaticvoidmain(String[]args)throwsIOException{ Filefile=newFile("jpg/j1.jpg"); Fileoutfile=newFile("jpg/j4.jpg"); FileInputStreamfis=newFileInputStream(file);//文件输入流 FileOutputStreamfos=newFileOutputStream(outfile);//定义文件输出流 InputStreamis=newBufferedInputStream(fis);//字节输入流 OutputStreamos=newBufferedOutputStream(fos);//字节输出流 inti=0; while(i!=-1){ i=is.read(); os.write(i); } is.close(); os.close(); }}2024/2/4

17/35过滤器数据流

节点流(nodestream):建立了程序和其他数据源或数据目标的数据通道,程序通过这类流可以和流的另一端的数据源或目标进行数据交互,这类数据流称为节点流(nodestream)。例如文件输入流过滤器数据流(filterStream)本身并不和具体的数据源和数据目标连接,它们连接在其他输入输出流上,提供各种数据处理,诸如转换、缓存、加密、压缩等功能,这类流称为过滤器数据流(filterStream)。2024/2/4

18/35FilterInputStreamFilterInputStream(InputStreamin)FilterOutputStreamFilterOutputStream(OutputStreamout)DataInputStreamFilterInputStream的子类DataOutputStreamFilterOutputStream的子类2024/2/4

19/35DataInputStream类常用方法方法功能readByte()读取一个有符号的字节。readChar()读取一个字符。readDouble()读取8个字节,返回double值。readFloat()读取4个字节,返回float值。readFully(byte[]b)读取b.length个字节,并存到数组b中。readInt()读取4个字节,并返回整形值。readLong()读取8个字节,并返回长整型值。readShort()读取2个字节,并返回短整型值。readUnsignedByte()读取1个字节,并返回无符号值。readBoolean()读1个字节,非0返回True,0返回False。readUnsignedShort()读2个字节,返回一个无符号的short值。readUTF()读取1个UTF-8编码的字符串。read(byte[]b)读取一定数量的字节,并将它们存储到缓冲区数组b中。read(byte[]b,intoff,intlen)从包含的输入流中将最多len个字节读入1个byte数组中。readFully(byte[]b,intoff,intlen)读取b.len个字节,并存到数组b中,第1个字节存在b[off]。2024/2/4

20/35DataOutputStream类常用方法方法功能size()返回到目前为止写入此数据输出流的字节数。flush()清空数据输出流。write(intb)将参数b的八个低位写入基础输出流。writeBoolean(booleanv)将boolean值以1字节值形式写入基础输出流。writeByte(intv)将v以1字节值形式写出到基础输出流中。writeBytes(Strings)将字符串按字节顺序写出到基础输出流中。writeChar(intv)将v以2字节值形式写入基础输出流中。writeChars(Strings)将字符串s按字符顺序写入基础输出流。writeInt(intv)将v以4字节值形式写入基础输出流中。writeLong(longv)将v以8字节值形式写入基础输出流中。writeShort(intv)将v以2字节值形式写入基础输出流中。writeUTF(Stringstr)用UTF-8修改版编码将一个字符串写入输出流。write(byte[]b,intoff,intlen)将byte数组中从偏移量off开始的len个字节写入基础输出流。writeDouble(doublev)使用Double类中的doubleToLongBits方法将double参数转换为一个long值,然后将该long值以8字节形式写入基础输出流中。writeFloat(floatv)使用Float类中的floatToIntBits方法将float参数转换为一个int值,然后将该int值以4字节值形式写入基础输出流中。2024/2/4

21/35例11.6保存和读取学生档案importjava.io.*;publicclasseg11_6{ publicstaticvoidmain(String[]args)throwsIOException{ Stringfilename="srudent.dat"; String[]students={"张三","李四"}; int[]ages={10,9}; DataOutputStreamdout=newDataOutputStream(newFileOutputStream(filename));

2024/2/4

22/35for(inti=0;i<2;i++){//用TAB符来分隔字段 dout.writeChars(students[i]); dout.writeChar('\t'); dout.writeInt(ages[i]); dout.writeChar('\t'); } dout.close(); DataInputStreamdin=newDataInputStream(newFileInputStream(filename));

2024/2/4

23/35 for(inti=0;i<2;i++){ StringBuffername=newStringBuffer(); charchread;//遇到TAB结束String字段读取 while((chread=din.readChar())!='\t'){ name.append(chread); } intage=din.readInt(); din.readChar();//丢弃分隔符 System.out.println("学生"+name+"的年龄:"+age+"."); } din.close(); }}2024/2/4

24/3511.4文件

创建文件类对象File类用于描述本地文件系统中的文件或目录。通过建立File类的实例对象,我们可以方便的建立与磁盘文件或目录的连接,进而通过File对象获取与之连接的磁盘文件或目录的有关属性并对其进行一定的管理操作。

File类的构造方法2024/2/4

25/35方法功能File(Stringpathname)根据参数pathname创建一个新File实例。File(Stringparent,Stringchild)根据parent路径和child文件名创建一个新File实例。File(URIuri)根据URL对象创建File实例。路径的表示方法通常有两种:绝对路径相对路径。例:d:\myworkspace\testproject\test\myfile.dat文件的路径写法“d:\\myworkspace\\testproject\\test\\myfile.dat”2024/2/4

26/35创建文件对象1.路径和文件写在一起。Filemyfile=newFile(“d:\\myworkspace\\testproject”,“\\test\\myfile.dat”);2.路径和文件分开。Filemyfile=newFile(“d:\\myworkspace\\testproject\\test”,“myfile.dat”);2024/2/4

27/35使用文件对象获取文件和目录属性的方法2024/2/4

28/35方法功能exists()判断文件对象表示的文件或目录是否存在。isFile()判断文件对象是否是一个标准文件。isDirectory()判断文件对象是否是一个目录。isHidden()判断文件对象是否是一个隐藏文件。isAbsolute()判断文件对象是否为绝对路径名。canExecute()判断文件对象是否可执行。canRead()判断文件对象表示的文件是否可读。canWrite()判断文件对象表示的文件可以修改。getName()获取文件对象表示的文件或目录的名称。lastModified()获取文件对象表示的文件的最后一次被修改的时间。length()获取文件对象表示的文件的长度。getParent()获取文件对象表示的目录的父目录的路径名字符串;如果此路径名没有指定父目录,则返回null。getParentFile()获取文件对象表示的路径的父目录的抽象路径

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论