Java高级全册精品完整课件.ppt

上传人(卖家):金钥匙文档 文档编号:774591 上传时间:2020-10-05 格式:PPT 页数:251 大小:1.75MB
下载 相关 举报
Java高级全册精品完整课件.ppt_第1页
第1页 / 共251页
Java高级全册精品完整课件.ppt_第2页
第2页 / 共251页
Java高级全册精品完整课件.ppt_第3页
第3页 / 共251页
Java高级全册精品完整课件.ppt_第4页
第4页 / 共251页
Java高级全册精品完整课件.ppt_第5页
第5页 / 共251页
点击查看更多>>
资源描述

1、JAVA IO 主要内容主要内容 文件操作文件操作/随机访问文件(非流式)随机访问文件(非流式) I/O流概述流概述 字节流字节流 字节流的基类字节流的基类 文件流文件流 过滤流过滤流 标准流标准流 字符流字符流 对象流对象流 管道流管道流 内存读写流内存读写流 顺序输入流顺序输入流 文件操作文件操作/随机访问文件随机访问文件 文件操作:文件操作:File 文件的创建: File(String pathname) File f=new File(“c:datatemp.dat”); File f=new File(“data/temp.dat”); File f=new File(“temp.

2、dat”); File(String parent, String child) File f=new File(“c:data” ,“temp.dat”); File f=new File(“data ” ,“ temp.dat”); File(File parent, String child) File f=new File(new File(“c:/data”) ,“temp.dat”); File f=new File(new File(“data ”) ,“ temp.dat”); 文件操作文件操作/随机访问文件随机访问文件 文件操作:文件操作:File 获取文件信息 boolea

3、n canRead() boolean canWrite() boolean setReadOnly() boolean exists() boolean isDirectory() boolean isFile() boolean isHidden() long lastModified() boolean setLastModified(long time) long length() String list() String list(FilenameFilter filter) File listFiles() File listFiles(FilenameFilter filter)

4、 File listFiles(FileFilter filter) static File listRoots() boolean mkdir() boolean mkdirs() (粉色的方法在JDK1.2之后才支持) 文件操作文件操作/随机访问文件随机访问文件 文件操作:文件操作:File boolean createNewFile() static File createTempFile(String prefix, String suffix) static File createTempFile(String prefix, String suffix, File director

5、y) boolean delete() void deleteOnExit() boolean renameTo(File dest) 文件操作文件操作/随机访问文件随机访问文件 文件操作:文件操作:File String getName() File getParentFile() String getParent() String getPath() boolean isAbsolute() File getAbsoluteFile() String getAbsolutePath() File getCanonicalFile() 抽象路径名的规范形式 String getCanonic

6、alPath()抽象路径名的规范路径名字符 串 文件操作文件操作/随机访问文件随机访问文件 文件操作:文件操作:File I/O流概述流概述 大部分程序都需要输入/输出处理,比如从键盘读取数 据、向屏幕中输出数据、从文件中读或者向文件中写数 据、在一个网络连接上进行读写操作等。在Java中,把 这些不同类型的输入、输出源抽象为流(Stream),而 其中输入或输出的数据则称为数据流(Data Stream), 用统一的接口来表示,从而使程序设计简单明了。 数据流数据流 起起 点点 终终 点点 文件文件,字符串字符串 存储区存储区(内存内存) 文件文件 网络端点网络端点 程序程序 终端终端 文件

7、文件 网络端点网络端点 程序程序 终端终端 I/O流概述流概述-流的用途流的用途 学习流有以下的用途:学习流有以下的用途: 文件、网络、内存、标准输入输出的数据读写都 需要用到流。 I/O流概述流概述-流的读写过程流的读写过程 读取流 写入流 I/O流概述流概述-流的分类流的分类 按照流向分类: 流一般分为输入流(Input Stream)和输出流(Output Stream)两类,但这种划分并不是绝对的。比如一个文件, 当向其中写数据时,它就是一个输出流;当从其中读取数 据时,它就是一个输入流。当然,键盘只是一个输入流, 而屏幕则只是一个输出流。 输入流:数据提供者,可从中读取数据出来输入流

8、:数据提供者,可从中读取数据出来 输出流:数据接收者,可往其中写数据输出流:数据接收者,可往其中写数据 按传递数据类型分类: 在JDK1.1之前,java.io包中的流只有普通的字节流字节流(以 byte为基本处理单位的流),这种流对于以16位的 Unicode码表示的字符流处理很不方便。 从JDK1.1开始, java.io包中加入了专门用于字符流字符流处 理的类(以Reader和Writer为基础派生的一系列类)。 I/O流概述流概述-流的分类流的分类 按流处理过程分类: 介质流(原始流),主要指一些基本的流,它们主要从 具体的介质上,如网络、文件、内存缓冲区等读取或者写 入数据。 过滤流

9、,主要指FilterInputStream/ FilterOutputStream 和FilterReader/ FilterWriter的子类,操作特点是接在其它 流上进行某些特定的处理。 I/O流概述流概述-流的分类流的分类 InputStream ByteArrayInputStream FileInputStream FilterInputStream BufferedInputStream DataInputStream LineNumberInputStream PushbackInputStream ObjectInputStream PipedInputStream Seque

10、nceInputStream StringBufferInputStream System.in OutputStream ByteArrayOutputStream FileOutputStream FilterOutputStream BufferedOutputStream DataOutputStream PrintStream System.out ObjectOutputStream PipedOutputStream I/O流概述流概述-字节流体系字节流体系 字节流字节流 输入流 输出流 字节流字节流 基类:基类:InputStream Java中每一种字节流的基本功能依赖于基本

11、类InputStream 和OutputStream,它们是抽象类抽象类,不能直接使用。 属于InputStream类的方法有: read():从流中读入数据 skip():跳过流中若干字节数 available():返回流中可用字节数 mark():在流中标记一个位置 reset():返回标记过的位置 markSupport():是否支持标记和复位操作 close():关闭流 在InputStream类中,方法read()提供了三种从流中 读数据的方法: int read():从输入流中读一个字节,形成一个 0255之间的整数返回(是一个抽象方法)。 int read(byte b):读多个

12、字节到数组中,填满 整个数组。 int read(byte b, int off, int len):从输入流中读 取长度为len的数据,写入数组b中从索引off开始 的位置,并返回读取得字节数。 对于这三个方法,若返回对于这三个方法,若返回1,表明流结束,否,表明流结束,否 则,返回实际读取的字节数。则,返回实际读取的字节数。 字节流字节流 基类:基类:InputStream 属于OutputStream类的方法有: write(int b):将一个字节输出到流中(只输出低位字 节,为抽象方法为抽象方法) write(byte b):将字节数组中的数据输出到流中 write(byte b,

13、int off, int len):将数组b中从off指定的 位置开始,长度为len的数据输出到流中 flush():刷空输出流,并将缓冲区中的数据强制送出 close():关闭流 Writer的方法: write(String s), write(String s, int off, int len) 字节流字节流 基类:基类:OutputStream 把输入流中的所有内容复制到输出流中 public void copy(InputStream in, OutputStream out) throws IOException byte buf = new byte4096; int len

14、= in.read(buf); while (len != -1) out.write(buf, 0, len); len = in.read(buf); 字节流字节流 基类:例子基类:例子 字节流字节流 文件流文件流 在I/O处理中,最常见的就是对文件的操作。java.io包中所 提供的文件操作类包括: FileInputStream: FileOutputStream: File: FileDescriptor: FilenameFilter:接口,主要用于实现文件名查找模式的匹配。 RandomAccessFile:提供对本地文件系统对本地文件系统中文件的随机 访问支持。 描述本地文件系

15、统本地文件系统中的文件或目录 用于读写本地文件系统写本地文件系统中的文件 字节流字节流 文件流:文件流:FileInputStream、 FileOutputStream FileInputStream类用来打开一个输入文件,若要打开的 文件不存在,则会产生例外FileNotFoundException,这 是一个非运行时例外,必须捕获或声明抛出; FileOutputStream类用来打开一个输出文件,若要打开 的文件不存在,则会创建一个新的文件,否则原文件的 内容会被新写入的内容所覆盖。 在进行文件的读/写操作时,会产生非运行时例外 IOException,必须捕获或声明抛弃(其它的输入/

16、输出流 处理时也同样需要进行输入/输出例外处理)。 字节流字节流 文件流:文件流:FileInputStream/ FileOutputStream 文件流的构造方法: FileInputStream(File f) 打开一个以f描述的文件作为输入。 FileInputStream(String name) 打开一个文件路径名为name的文件作为输入。 FileOutputStream(File f) 创建一个以f描述的文件作为输出,文件如果已经存在,则其内容 被清空。 FileOutputStream(String name) 创建一个文件路径名为name的文件作为输出,文件如果已经存在,

17、则其内容被清空。 FileOutputStream(String name, boolean append) 创建一个文件路径名为name的文件作为输出,文件如果已经存在, 则在该输出上输出的内容被接到原有内容之后。 File f1 = new File(“file1.txt”); File f2 = new File(“file2.txt”); FileInputStream in=new FileInputStream(f1); FileOutputStream out=new FileOutputStream(f2); FileOutputStream out=new FileOutpu

18、tStream(“file3.txt”); 输入流的参数是用于指定输入的文件名,输出流的参数则 是用于指定输出的文件名。 输出文件输出文件 输入文件输入文件 read write 字节流字节流 文件流:文件流:FileInputStream/ FileOutputStream 字节流字节流 文件流:例子文件流:例子1 import java.io.*; class Filestream public static void main(String args) try File inFile=new File(file1.txt); File outFile=new File(file2.txt

19、); FileInputStream fis=new FileInputStream(inFile); FileOutputStream fos=new FileOutputStream(outFile); int c; while(c=fis.read()!=-1) fos.write(c); fis.close(); fos.close(); catch(FileNotFoundException e) System.out.println(FileStreamsTest: +e); catch(IOException e) System.err.println(FileStreamsTe

20、st: +e); 将 一 个 文 件 复 制 到 另 一 个 文 件 中 ( 覆 盖 ) 将 一 个 文 件 复 制 到 另 一 个 文 件 中 ( 覆 盖 ) 把一个文件的内容加到另一个文件后把一个文件的内容加到另一个文件后 public void cat(String fsrc, String fdest) try InputStream in = new FileInputStream(fsrc); OutputStream out = new FileOutputStream(fdest, true); copy(in, out); out.close(); in.close(); c

21、atch (IOException ex) System.err.println(ex); 字节流字节流 文件流:例子文件流:例子2 字节流字节流 过滤流过滤流 java.io中提供类FilterInputStream和FilterOutputStream 分别对其他输入/输出流进行特殊处理,它们在读/写数据的 同时可以对数据进行特殊处理。另外还提供了同步机制,使 得某一时刻只有一个线程可以访问一个输入/输出流。 类FilterInputStream和FilterOutputStream分别重写了父 类InputStream和OutputStream的所有方法,同时,它们的 子类也应该重写它们

22、的方法以满足特定的需要。 要使用过滤流,首先必须把它连接到某个输入要使用过滤流,首先必须把它连接到某个输入/输出流输出流 上上,通常在构造方法的参数中指定所要连接的流: protected FilterInputStream(InputStream in); protected FilterOutputStream(OutputStream out); 字节流字节流 过滤流过滤流 过滤流 其他流 字节流字节流 过滤流:缓冲流过滤流:缓冲流 类BufferedInputStream和BufferedOutputStream实现了带 缓冲的过滤流,它提供了缓冲机制,把任意的I/O流“捆绑” 到缓冲

23、流上,可以提高该I/O流的读取效率。 在初始化时,除了要指定所连接的I/O流之外,还可以 指定缓冲区的大小。缺省时是用32字节大小的缓冲区;最 优的缓冲区大小常依赖于主机操作系统、可使用的内存空 间以及机器的配置等;一般缓冲区的大小为内存页或磁盘 块等的整数倍,如8912字节或更小。 BufferedInputStream(InputStream in, int size) BufferedOutputStream(OutputStream out, int size) 2、字节流、字节流 过滤流:缓冲流过滤流:缓冲流 输出流 缓冲区 write() 输入流 缓冲区 read() 将缓冲流与文

24、件流相接: FileInputStream in = new FileInputStream(“file1.txt”); FileOutputStream out = new FileOutputStream (“file2.txt”); BufferedInputStream bin = new BufferedInputStream(in,1024) BufferedOutputStream bout = new BufferedOutputStream(out,1024); int len; byte bArray=new byte1024; len=bin.read(bArray);

25、/len中得到的是实际读取的长度中得到的是实际读取的长度, bArray中得到的是数据中得到的是数据 file1.txt file2.txt 输入流输入流 输出流输出流 输入缓冲流输入缓冲流 输出缓冲流输出缓冲流 文件文件文件流文件流缓冲流缓冲流 字节流字节流 过滤流:缓冲流过滤流:缓冲流 字节流字节流 过滤流:缓冲流过滤流:缓冲流 对于BufferedOutputStream,只有缓冲区满时,才会将数据真正送 到输出流,但可以使用flush()方法人为地将尚未填满的缓冲区中的 数据送出。 public void copy(InputStream in, OutputStream out) t

26、hrows IOException out = new BufferedOutputStream(out, 4096); byte buf = new byte4096; int len; while (len = in.read(buf) != -1) out.write(buf, 0, len); out.flush(); /最后一次读取的数据可能不到4096字节 使用缓冲流支持的使用缓冲流支持的 mark和和reset机制机制 public String readLine( BufferedInputStream in) throws IOException StringBuffer s

27、b = new StringBuffer(); int c = in.read(); return sb.toString(); while (c != -1) if (c = n) break; if (c = r) in.mark(1); if (in.read() != n) in.reset(); break; sb.append(char)c); c = in.read(); 字节流字节流 过滤流:缓冲流(例子)过滤流:缓冲流(例子) 字节流字节流 过滤流:数据流过滤流:数据流 接口接口DataInput和和DataOutput,设计了一种较为高级的 数据输入输出方式:除了可处理字节

28、和字节数组外,还 可以处理int、float、boolean等基本数据类型,这些数据 在文件中的表示方式和它们在内存中的一样,无须转换, 如read(), readInt(), readByte() ;write(), writeChar(), writeBoolean()。此外,还可以用readLine()方法读取一 行信息。 字节流字节流 过滤流:数据流(过滤流:数据流(DataInput) boolean readBoolean() byte readByte() short readShort() char readChar() int readInt() long readLong(

29、) double readDouble() float readFloat() int readUnsignedByte() int readUnsignedShort() 字节流字节流 过滤流:数据流(过滤流:数据流(DataInput) void readFully(byte b) 读满字节数组,不同于InputStream.read void readFully(byte b, int off, int len) 读满指定长度,不同于InputStream.read int skipBytes(int n) 与InputStream.skip等价 String readUTF() 按照U

30、TF-8形式从输入中读取字符串 String readLine() 按回车(r)换行(n)为分割符读取一行字符串 不完全支持UNICODE 字节流字节流 过滤流:数据流(过滤流:数据流(DataOutput) void writeBoolean(boolean v) void writeByte(int v) void writeShort(int v) void writeChar(int v) void writeInt(int v) void writeLong(long v) void writeFloat(float v) void writeDouble(double v) 字节流

31、字节流 过滤流:数据流(过滤流:数据流(DataOutput) void write(byte b) 与OutputStream.write同义 void write(byte b, int off, int len) 与OutputStream.write同义 void write(int b) 与OutputStream.write同义 void writeBytes(String s) 只输出每个字符的低8位;不完全支持UNICODE。 void writeChars(String s) 每个字符在输出中都占两个字节。 字节流字节流 过滤流:数据流过滤流:数据流 数据流类 DataInp

32、utStream和DataOutputStream 的处理对象除了是字节或字节数组外,还可以实 现对文件的不同数据类型的读写: 分别实现了DataInput和DataOutput接口 在提供了字节流的读写手段的同时, 以统一的通用的形式向输入流中写入boolean,int, long,double等基本数据类型,并可以再次把基本数 据类型的值读取回来。 提供了字符串读写的手段。 数据流可以连接一个已经建立好的数据对象,例如网络 的连接、文件等。数据流可通过如下方式建立: FileInputStream fis = new FileInputStream(file1.txt); FileOutp

33、utStream fos = new FileOutputStream(file2.txt); DataInputStream dis = new DataInputStream(fis); DataOutputStream dos = new DataOutputStream(fos); 字节流字节流 过滤流:数据流过滤流:数据流 class DataStream public static void main(String args) throws IOException FileOutputStream fos = new FileOutputStream(“a.txt”); DataO

34、utputStream dos = new DataOutputStream (fos); try dos.writeBoolean(true); dos.writeByte(byte)123); dos.writeChar(J); dos.writeDouble(3.141592654); dos.writeFloat(2.7182f); dos.writeInt(1234567890); dos.writeLong(998877665544332211L); dos.writeShort(short)11223); finally dos.close(); 过 滤 流 : 数 据 流 (

35、例 子 过 滤 流 : 数 据 流 ( 例 子 1 ) FileInputStream fis = new FileInputStream(a.txt); DataInputStream dis = new DataInputStream(fis); try System.out.println(t +dis.readBoolean(); System.out.println(t +dis.readByte(); System.out.println(t +dis.readChar(); System.out.println(t +dis.readDouble(); System.out.pr

36、intln(t +dis.readFloat(); System.out.println(t +dis.readInt(); System.out.println(t +dis.readLong(); System.out.println(t +dis.readShort(); finally dis.close(); /main() /class DataStream 过 滤 流 : 数 据 流 ( 例 子 过 滤 流 : 数 据 流 ( 例 子 1 ) /利用方法利用方法readLine()计算一个输入流中的字符数和行数计算一个输入流中的字符数和行数 / (适合于文本文件)(适合于文本文件

37、) int DataLine(InputStream in) DataInputStream data = new DataInputStream(in); String currentLine; int lineCount=0; int charCount=0; while(currentLine=data.readLine()!=null) +lineCount; charCount += currentLine.length(); return (charCount/(float)lineCount); 字节流字节流 过滤流:数据流(例子过滤流:数据流(例子2) 字节流字节流 过滤流:其

38、他过滤流过滤流:其他过滤流 LineNumberInputStream:主要用于对文本文件的处 理,提供了行号控制功能。 已经被LineNumberReader取代 PushBackInputStream:在编译程序的词法分析阶段, 经常要超前读入一个字节以界定当前词的属性,然后再将 该字节退回(因为下面的处理可能还会用到该字节)。 PushBackInputStream就提供了这样的能力,它提供了一 个方法将刚刚读入的字节退回到输入流中去。 PrintStream:其作用是将Java语言中的不同类型的数据 以字符表示形式输出到相应的输出流中去。 不产生异常。可自动flush。通过checkE

39、rror()检查错误。 字节流字节流 标准流标准流 语言包java.lang中的System类管理标准输入/输出流和错 误流。 System.in,从InputStream中继承而来,用于从标准输入 设备中获取输入数据(通常是键盘)。 System.out,从PrintStream中继承而来,把输出送到缺 省的显示设备(通常是显示器)。 System.err,也是从PrintStream中继承而来,把错误信 息送到缺省的显示设备(通常是显示器)。 每当每当main方法被执行时,就自动生成上述三个对象。方法被执行时,就自动生成上述三个对象。 public class ReadFromKB pub

40、lic static void main(String args) try byte bArray=new byte128; String str; System.out.println(Enter something Using Keyborad:); System.in.read(bArray); str = new String(bArray, 0); System.out.print(You entered:); System.out.println(str); catch(IOException ioe) System.out.println(ioe.toString(); 过 滤

41、流 : 标 准 流 ( 例 子 ) 过 滤 流 : 标 准 流 ( 例 子 ) 从 键 盘 中 获 取 数 据 从 键 盘 中 获 取 数 据 主要内容 ObjectOutputStream,ObjectInputStream InputStreamReader,OutputStreamWrite r FileReader ,FileWriter BufferedReader,BufferedWriter BufferedReader ,PrintWriter 字节流字节流 对象流对象流 对象的持续性(Persistence) 能够纪录自己的状态以便将来再生的能力,叫对象的持续性。 对象的串行

42、化(Serialization) 对象通过写出描述自己状态的数值来记录自己的过程叫串行 化。串行化的主要任务是写出对象实例变量实例变量的数值,如果变量 是另一个对象的引用,则引用的对象也要串行化。这个过程是 递归的。 对象流 能够输入输出对象的流称为对象流。 可以将对象串行化后通过对象输入输出流写入文件或传送到 其它地方。 在Java中,允许可串行化的对象可串行化的对象在通过对象流进行传输。 只有实现Serializable接口的类才能被串行化, Serializable接口 中没有任何方法,当一个类声明实现Serializable接口时,只是 表明该类加入对象串行化协议。 public cl

43、ass Student implements Serializable int id; String name; int age; String department; public Student(int id, String name, int age, String department) this.id=id; this.name=name; this.age=age; this.department =department; 字节流字节流 对象流对象流 要串行化一个对象,必须与一定的对象输出/输入流联 系起来,通过对象输出流将对象状态保存下来(将对象保存 到文件中,或者通过网络传送到

44、其他地方) ,再通过对象 输入流将对象状态恢复。 类ObjectOutputStream和ObjectInputStream分别继承了接 口ObjectOutput和ObjectInput,将数据流功能扩展到可以 读写对象,前者用writeObject()方法可以直接将对象保存到 输出流中,而后者用readObject()方法可以直接从输入流中 读取一个对象。 字节流字节流 对象流对象流 字节流字节流 对象流对象流 从某种意义来看,对象流与数据流是相类似 的,也具有过滤流的特性。利用对象流来输入/ 输出对象时,也不能单独使用,需要与其他的 流连接起来。 对象是可串行化的 使用对象流 publi

45、c class Objectser public static void main(String args) Student stu=new Student(981036, “Li Ming”, 16, “CSD”); try FileOutputStream fo = new FileOutputStream(“data.ser”); ObjectOutputStream so = new ObjectOutputStream(fo); so.writeObject(stu); so.close(); catch(Exception e) System.out.println(e) ; 对

46、象 流 : 例 子 ( 对 象 的 存 储 ) 对 象 流 : 例 子 ( 对 象 的 存 储 ) public class ObjectRecov public static void main(String args) Student stu; try FileInputStream fi = new FileInputStream(“data.ser”); ObjectInputStream si = new ObjectInputStream(fi); stu = (Student)si.readObject(); si.close(); catch(Exception e) System.out.println(e); System.out.printl

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 大学
版权提示 | 免责声明

1,本文(Java高级全册精品完整课件.ppt)为本站会员(金钥匙文档)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|