Java网络编程技术(Java基础与进阶)ppt.ppt_第1页
Java网络编程技术(Java基础与进阶)ppt.ppt_第2页
Java网络编程技术(Java基础与进阶)ppt.ppt_第3页
Java网络编程技术(Java基础与进阶)ppt.ppt_第4页
Java网络编程技术(Java基础与进阶)ppt.ppt_第5页
已阅读5页,还剩127页未读 继续免费阅读

下载本文档

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

文档简介

第1章 Java基础 1.1 Java技术 1.1.1 Java 语言的特点 1.1.2 Java与C/C的差别 1.1.3 两类Java程序 1.1.4 Java程序的编辑、编译和运行 1.1.5 Java语言的注释和分隔符 1.1.6 Java语言的标示符和关键字 1.1.7 Java语言的数据类型 1.1.8 Java中的常量 1.1.9 变量 第1章 Java基础 1.2 Java环境的配置 1.3 Java applet 1.3.1 Java applet的特点 1.3.2 Java applet的程序结构 1.3.3 applet的主要方法 1.3.4 Java applet的运行 本章小结 前言 nJava语言是目前推广速度最快的程序设 计语言,它采用面向对象的编程技术,功 能强大而又简单易学。Java伴随着Internet 的发展而成熟,内置了多线程和网络支持 能力,可以说是网络世界的通用语言。本 章将介绍Java语言的基本特点和开发的一 般过程,使读者有一个概貌。 1.1 Java技术 nJava以跨平台、面向对象多线程、兼具 编译型语言和解释型语言的优点、稳定性 好并具良好的安全性等众多特点,尤其是 和Internet的完美结合而取得成功。 1.1.1 Java 语言的特点 n1Java语言最突出的特点是跨平台性, 也叫与平台无关性。 n2Java语言的第二个重要特点是面向对 象。 n3Java语言的第三个特点是多线程。 n4Java语言的第四个特点是具有编译型 语言和解释型语言的优点。 n5Applet功能以及与此相关的图形功能 。 1.1.2 Java与C/C的差 别 n1Java对内存的分配是动态的,同时,Java能自动 回收不再使用的内存,具有自动垃圾搜集功能。 n2Java不使用goto语句,而用try-catch-finally异常处 理语句。 n3Java不在所有类之外定义全局变量。 n4Java不支持头文件。 n5Java不支持宏定义,而是用关键字final来定义常量 。 n6Java为每种数据类型都分配固定长度,例如在 Java中,int类型总是32位的。 n7Java不使用指针,保证系统的安全性。 1.1.3 两类Java程序 Java应用程序 Java应用程序(Java Application)是一种 能在支持java的平台上独立运行的程序,它 是通过Java虚拟机解释执行的。Java应用 程序的主类中一定包含main()方法,它是 应用程序的主进程,即程序执行的入口。 1.1.3 两类Java程序 nJava应用程序的程序框架如下: public class 类名 public static void main(String args) /程序代码 1.1.3 两类Java程序 nJava小程序 Java小程序(Java Applet)是一种通过 标记符将字节码文件内 嵌在html文档中,通过支持java浏览器才 能运行的程序。小程序没有自己的主进程 。 1.1.3 两类Java程序 n小程序的程序框架如下: import java.applet.Applet; import java.awt.Graphics; public class Applet1 extends Applet /变量或属性定义; public void init()/初始化方法 /.; public void paint(Graphics g)/小程序显示结果的方法 /.; /其它方法 1.1.3 两类Java程序 n嵌入小程序的html文档 小程序不能独立运行,它是通过支持Java的浏览器运 行。因此,必须将小程序编译后形成的字节码(.class)文 件利用标记符嵌在html文档中。 1.1.4 程序的编辑、编译和 运行 n开发一个Java程序有以下几步: 1建立Java源程序 2编译源程序 3运行Java程序 第一个Java程序: HelloWorld.java。 / HelloWorld.java / A first program in Java public class HelloWorld public static void main (String args ) System.out.println(“Hello World!“); 1.1.5 Java语言的注释和分隔 符 块注释:多行注释 n/* 注释部分 */ n/* 注释部分 */ 行注释:以/开始的本行的后面部分为注释内容,用于单行的注释。 n/ 注释部分 几个重要的分隔符 n大括号 用来定义类体、方法体、复合语句和数组的初始化 。 n分号;是语句结束标志。 n逗号,区分方法的各个参数,区分变量说明的各个变量。 n冒号:用于语句标号。 1.1.6 Java的标示符和关键 字 n标示符用来给自定义的变量、方法和类 及类对象命名。 nJava语言的标识符必须由字母,下划线 (“_”)或美元符号(“$”)开始,其余字符 可以是上述三种符号或数字(09)。 1.1.7 Java语言的数据类型 n数值型:既可以是整数,也可以是浮点 数。 n字符型(char):存储一个字符,如a 、d等。 n布尔型(boolean):也称为逻辑型,值 为true或false。 1.1.8 Java中的常量 n常量是在程序运行期间值不改变的量, 常量不能被程序修改。 n在Java语言中,定义常量通过final关键 字实现。Java 的常量包括整型、实型、字 符型及布尔型常量,还有字符串常量。 1.1.9变量 n变量是Java程序中的基本存储单元,它具有名 称、类型、值和作用域等特性。在使用任何变量 之前必须先定义。 n如果是基本数据类型的变量,在声明变量类型 时,就为其分配了内存单元,因为它们的存储长 度是固定的。 n如果是复合数据类型的变量,声明完其数据类 型之后,还要用关键字new为其分配内存单元。 1.2 Java环境的配置 JDK一般有三种版本: n(1)SE(J2SE),standard edition,标 准版,是我们通常用的一个版本。 n(2)EE(J2EE),enterpsise edtion,企 业版,使用这种JDK开发J2EE应用程序。 n(3)ME(J2ME),micro edtion,主要用 于移动设备、嵌入式设备上的java应用程 序。 1.2 Java环境的配置 1.2 Java环境的配置 1.2 Java环境的配置 1.3 Java applet nJava applet(又称Java小程序),是一 种特殊的Java应用程序,是用Java编写的 、含有可视化内容并被嵌入Web页中由浏 览器解释执行的小程序。 n它由网服务器提供,在网络上传输,并 自动由浏览装载,作为网页的一部分来执 行。本节将简要介绍Java applet的特点及 其应用。 1.3.1 Java applet的特点 nJava应用程序中,必须有一个main()方法。main()方法是程序的 入口,当程序开始运行时,解释器首先查找main()方法并执行。而 Java applet中则不需要main()方法,它必须嵌入HTML文件中,由支 持Java applet的浏览器运行。 nJava应用程序可以独立运行。而Java applet不能独立运行,需要 依赖于网络浏览器。 nJava应用程序所实现的功能是完全的,不需依赖于其它程序。而 Java applet实现的功能是不完全的,它必须借助于浏览器中预先设 计好的功能和已有的图形界面。Java applet只需接收浏览器发送给 它的消息,并及时做出响应。 nJava应用程序中的所有方法的使用是通过调用实现的。可以人为 控制。而Java applet中有一部分方法是固定的,只能由浏览器在特 定时刻和场合调用,不能人为控制,但可以重载。 1.3.2 Java applet的程序结 构 nJava applet的一般程序结构如下: nimport java.applet.*; nimport java.awt.*; npublic class 子类名 extends Applet /定义Applet类的子类 n npublic void init() n方法体 /初始化方法 npublic void start() n方法体 /开始执行方法 npublic void stop() n方法体 /停止执行方法 npublic void destroy() n方法体 /退出方法 npublic void paint(Graphics g) n方法体 /绘画方法 n n 1.3.3 applet的主要方法 init( )方法 n在Applet执行过程中,init( )方法只执行一次。 当浏览器第一次浏览含有Applet的Web页载入 Applet时,就会执行init( )方法。由于在Applet执 行过程中,该方法只被执行一次,所以可以在 init( )方法中进行一些只需执行一次的初始化操作 ,如变量的初始化、设置Applet初始状态、载入 图形或字体、获取HTML中Applet标记单元中 设定的参数等。 1.3.3 applet的主要方法 2start( )方法 n调用完init( )方法,浏览器将调用start( )方法启动Applet。和init() 方法不同,在Applet的执行过程中,start( )方法可被浏览器调用多次 。 n在下列情况下,浏览器会调用start()方法: (1)浏览器从图标状态恢复为窗口状态或缩放浏览器窗口时。 (2)Applet第一次载入时。 (3)离开该Web页后又再返回时。 (4)reload该页面时。 n在start( )方法中可启动相关线程来控制Applet,给引入类对象发 送消息,或以某种方式通知Applet开始运行。该方法是Applet的主体 。 1.3.3 applet的主要方法 3stop( )方法 n该方法与start( )方法是相对应的,在Applet执行过程中 ,也会被浏览器调用多次。 n在下列情况下,浏览器会调用stop( )方法: (1)浏览器从图标状态恢复为窗口状态或缩放浏览器 窗口时。 (2)离开Applet所在Web页时。 (3)reload该页面时。 (4)关闭该Web页时。 (5)从该Web页退出浏览器运行时。 1.3.3 applet的主要方法 destroy( )方法 n在彻底结束对该Web页的访问或退出浏览器时 调用destroy()方法,卸载Applet,释放载入 Applet时分配的系统资源。在Applet的执行过程 中,destroy()方法只执行一次。 ndestroy()方法是Applet类的类方法,只能用于 Applet。可在该方法中执行释放系统资源的代码 。但一般不需重写destroy()方法,因为Java运行 系统本身会自动进行“垃圾”处理和内存管理,除 非用了特殊的资源如创建的线程。 n注意:destroy()方法与stop()方法不同。 1.3.4 Java applet的运行 nJava applet程序不能独立运行,必须由 浏览器来运行,因此我们需编写一个 HTML文件,通过标记将applet程 序编译生成的字节码文件嵌入HTML文件 ,通知浏览器来运行Java applet。 1.3.4 Java applet的运行 如要运行例1.2,可编写如下的HTML文件: example 本章小结 本章主要讲述了如下主要内容: nJava的基础知识 nJDK的下载及安装使用 nJava applet的应用 第2章 Java进阶 2.1 认识流 2.2 InputStream类和OutputStream类 2.2.1 InputStream类 2.2.2 OutputStream类 2.3 文件处理 2.3.1 File类 2.3.2 FileInputStream类和FileOutputStream类 2.3.3 Reader类和Writer类 第2章 Java进阶 2.4 过滤流 2.5 线程 2.5.1 线程概述 2.5.2 创建线程 2.5.3 线程同步和死锁 2.6 异常处理 2.6.1 异常和异常类 2.6.2 异常处理 本章小结 2.1 认识流 n任何程序都离不开信息的输入/输出(I/O) 。 n在Java语言中,输入/输出是通过流来实现的 。Java里的流是由字符或位所组合成的,可通 过它来读写数据。 n以数据的读取或写入而言,流可分为输入流 (Input Stream)和输出流(Output Stream) 两大类。输入流只能读不能写,输出流只能写 不能读。 n为方便流的处理,Java提供了java.io类 库,该类库为用户提供了几乎所有常用的 输入输出流,因此在所有涉及流操作的程 序中在程序的最前面应出现如下语句: import java.io.*; 部分流类的继承关系图 nInputStream类是所有输入流类的父类, 其子类能够完成不同的输入功能。 nOutputStream类是所有输出流类的父类 ,其子类能够完成不同的输出功能。 nInputStream类和OutputStream类都是抽 象类。 2.2 InputStream类和 OutputStream类 2.2.1 InputStream类 nInputStream类是一个抽象类,包含一套 所有输入都需要的方法,可以完成最基本 的从输入流读入数据的操作。 InputStream类的常用方法 方法功能描述 public InputStream()构造方法,子类调用 public int read()从输入流中的当前位置读入一个字节的二进制数据,返回值 是0255之间的一个整数,该方法是abstract的,需子类实现 public int read(byte b)从输入流中读取长度为b.length的数据并保存入数组b,返回 值为读取的字节数 public int read(byte b,int off,int len) 从输入流中的当前位置读取len个字节并保存入数组b中从下 标off+1开始的位置,返回值为读取的字节数 public int available()返回值为输入流可以读取的字节数 public void mark()在输入流的当前位置作为标记 public void reset()将位置指针返回到标记位置 public long skip(long n)将输入流中当前位置向后移动n个字节,返回值为跳过的字节 数 public void close()关闭输入流 InputStream类使用说明 n注意事项: n(1)流在使用完成后,应显式调用close()方 法关闭流。 n(2)mark()方法和reset()方法在使用之前应判 断文件系统是否支持该方法。 n当Java程序需从外部设备如键盘、磁盘文件等 读取数据时,需创建一个相应类型的输入流对象 来完成与该外部设备的连接。由于InputStream 是抽象类,所以程序中创建的输入流对象一般是 InputStream某个子类的对象,此时通过该对象 调用相应的read()方法实现对数据的输入操作。 2.2.2 OutputStream类 nOutputStream类是一个抽象类,包含一 套所有输出都需要的方法,可以完成最基 本的从输出流写入数据的操作。 OutputStream类的常用方 法 方法功能描述 public OutputStream()构造方法 public void write(int b)将数据b写入输出流,abstract方法,子类实现 public void write(byte b)将字节数组b中长度为b.length字节的数据写入输出流 public void write(byte b,int off,int len) 将字节数组b中从下标off开始的长度为len个字节的数据 写入输出流 public void flush()强制清空缓冲区并输出所有被缓冲的字节 public void close()关闭输出流 注意事项 nflush()方法:对于缓冲流式输出,write()方法 所输出的数据不是直接输出到与输出流相连的外 部设备上,而是先暂时存放在流的缓冲区中,等 到缓冲区的数据存储到一定的数量时,再执行向 外部设备的写操作一次输出到外部设备。这样处 理的好处是,可以降低CPU对外部设备的读写次 数,提高系统效率。但也可在缓冲区不满时即强 制清空并输出缓冲区中的数据,此时需调用 flush()方法。 2.3 文件处理 n文件处理是最常见的I/O处理。在实际的 编程过程中,经常需要对文件进行操作。 n本小节将简单介绍一些常用的文件类: File类、FileInputStream类和 FileOutputStream类、Writer类和Reader 类。 2.3.1 File类 n要对一个文件进行操作,首先需要知道 文件的有关信息,如文件的名称、文件的 路径或文件属性等等。 n在Java语言中,通过文件(File)类提供 的方法可以访问文件的这些信息。File类是 通过文件名列表来描述一个文件对象的属 性。 n要进行文件处理,首要的是了解File类提供 的各种方法。 n类File提供了一种与机器无关的方式来描述 一个文件对象的属性。每个File类对象表示一 个磁盘文件或目录,其对象属性中包含了文件 或目录的相关信息,如文件名、文件长度等, 调用它的方法可以完成对文件或目录的管理操 作,如创建、删除、改名等。 File类常用的构造方法 构造方法功能描述 public File(String path)用path参数创建File对象所对应的磁盘 文件或目录及其路径 public File(String parentdir,String childdir)以path为路径,以name为文件或目录 名创建File对象 public File(File dir,String name)以File对象dir为目录,以name为文件 或目录名创建File对象 File类的常用方法 方法功能描述 public String getName()获取文件名或目录名 public String getPath()获取文件或目录的路径 public String AbsolutePath()获取文件或目录的绝对路径 public String getParent()获取文件或目录的上一级目录 public boolean exists()测试文件是否存在 public boolean canWrite()测试文件是否可写 public boolean canRead()测试文件是否可读 public boolean isHidden()测试文件是否为隐藏文件 File类的常用方法 方法功能描述 public boolean isDirectory()测试当前File对象是否为目录 public String renameTo(File newName)文件改名 public boolean delete()文件删除 public boolean mkdir()创建当前目录的子目录 public boolean equals(File filename)比较两个文件或目录是否相同 public long lastModified()获得文件上次被修改的时间 public long length()获得文件长度 public String list()获取当前目录下的所有文件和目录 【例2.1】File类的应用 /File类的应用app_FileClass.java import java.io.File; import java.io.IOException; public class app_FileClass public static void main(String args) throws IOException File dir=new File(“d:book“); File f=new File(dir,“a.txt“); /File path=new File(“d:booka.txt“); File f2=new File(“d:bookb.txt“); System.out.println(“); System.out.println(“-“+f+“的有关信息-“); System.out.println(“exist: “+f.exists(); System.out.println(“name: “+f.getName(); System.out.println(“path: “+f.getPath(); System.out.println(“absolute path:“+f.getAbsolutePath(); System.out.println(“is a file: “+f.isFile(); 【例2.1】File类的应用 System.out.println(“is a directory:“+f.isDirectory(); System.out.println(“length: “+f.length(); System.out.println(“can read: “+f.canRead(); System.out.println(“can write: “+f.canWrite(); File newf=new File(“c.txt“); System.out.println(“-rename“+f+“-“); f.renameTo(newf); System.out.println(“name: “+newf.getName(); System.out.println(f+“ exist: “+f.exists(); System.out.println(newf+“ exist: “+newf.exists(); System.out.println(“compare f to f2: “+f.equals(f2); newf.delete(); System.out.println(newf+“ exist: “+newf.exists(); 2.3.2 FileInputStream类 和FileOutputStream类 n类FileInputStream和FileOutputStream 分别继承于InputStream类和OutputStream 类,它们重写或实现了父类中的所有方法 。通过这两个类可以打开本地文件,以字 节为单位从文件中顺序读取数据或向文件 中写入数据。 1. FileInputStream类 FileInputStream类常用的构造方法 构造方法功能描述 public FileInputStream(String name) 以name为文件名创建 FileInputStream对象 public FileInputStream(File file)以File对象为文件创建 FileInputStream对象 FileInputStream类的常用方 法 方法功能描述 public int available()获取当前文件输入流中可读取的字节数 public void close()关闭文件输入流 public long skip(long n)在文件输入流里跳过n个字节的数据 public int read()从文件输入流中读取一个字节的数据 public int read(byte b)从文件输入流中读取b.length个字节的数据到字 节数组b中 public int read(byte b,int off,int len)从文件输入流中读取len个字节的数据,并存放 到字节数组b中从下标off开始的位置 注意:在调用类FileInputStream的相关方法来完成 文件操作时均有可能抛出IOException异常。 【例2.2】利用 FileInputStream类读取文件 内容 / 利用FileInputStream读取文件Read_File.java import java.io.*; public class Read_File public static void main(String args) throws IOException FileInputStream fin=new FileInputStream(“mouse.txt“); /创建FileInputStream对象 System.out.println(“文件长度为:“+fin.available(); byte b=new bytefin.available(); / 建立byte数组 fin.read(b); / 将读取的内容写入数组b里 System.out.println(“文件内容为:“); System.out.println(new String(b); / 输出数组b的内容 System.out.println(); fin.close(); 程序分析 n(1)文件mouse.txt已存在,且与文件 Read_File.java位于同一目录下。若不在同 一目录下则使用绝对路径。若文件不存在 ,则抛出IOException异常。 n(2)在获取文件长度时应注意,一个汉 字占两个字节,一个回车分解为“rn”两个 转义字符,占两个字节。 n(3)输出字节数组b的内容时应将其转 换为字符串后再进行输出操作。 2. FileOutputStream类 FileOutputStream类常用的构造方法 构造方法功能描述 public FileOutputStream(String name)以name为文件名创建 FileOutputStream对象,原先的 文件会被覆盖 public FileOutputStream(String name,boolean a)同上,但若a为true,则数据追 加在原数据之后 public FileOutputStream(File file)以File对象为文件创建 FileOutputStream对象 FileOutputStream类的常用 方法 方法功能描述 public void close()关闭文件输出流 public int write()从文件输出流中读取一个字节的数据 public int write(byte b)将字节数组b中的数据写入文件输出流 public int write(byte b,int off,int len)将字节数组b中从下标off开始的len个字节写入 文件输出流 注意:在调用类FileOutputStream的相关方法来完 成文件操作时均有可能抛出IOException异常。 【例2.3】图片复制 /图片复制 Copy_Pic.java import java.io.*; public class Copy_Pic public static void main(String args) throws IOException FileInputStream fin=new FileInputStream(“monkey.jpg“); /要复制的图片文件 File file=new File(“monkey(new).jpg“);/复制到的图片文件 FileOutputStream fout=new FileOutputStream(file); System.out.println(“图片大小为:“+fin.available(); / 输出文件大小 byte b=new bytefin.available(); / 建立byte类型的数组b fin.read(b); / 将图片读入b数组 fout.write(b); / 将b数组里的数据写入新文件monkey(new).jpg System.out.println(“图片复制完成,请查看所在目录:“); System.out.println(file.getAbsolutePath(); fin.close(); fout.close(); 程序分析 n文件monkey.jpg已存在,且与文件 Copy_Pic.java位于同一目录下。若不在同 一目录下则使用绝对路径。文件 monkey(new).jpg为复制后的图片文件,由 fout创建,若该文件已存在,则被覆盖。若 文件不存在或创建不成功则抛出 IOException异常。 2.3.3 Reader类和Writer类 nReader类和Writer类可用来处理字符类 型文件的顺序读取和写入工作。它们都是 抽象类,提供了一些用于字符流处理的接 口,不能用来创建对象,主要用来派生字 符流子类。Java中所有字符流处理的流类 都是基于Reader类和Writer类。 1Reader类 Reader类是定义Java字符流输入模式的抽象类。 Reader类的主要方法 : 方法功能描述 public abstract void close()关闭流 public int read()读取流中的一个字符 public int read(char cbuf)读取一系列字符到字符数组cbuf中 public abstract int read(char cbuf,int off,int len)读取len个字符存放到字符数组cbuf从下标off 开始的位置 public long skip(long n)跳过n个字符 public boolean ready()测试流是否已准备好可以读取字符 public boolean markSupported()测试流是否支持mark()操作 public void mark(int numChars)在流的当前位置作标记,最多可回溯numChars 个字符 public void reset()将流标记重置到上一次做标记处 2Writer类 Writer类是定义Java字符流输出模式的抽象类。 Writer类的主要方法: 方法功能描述 public abstract void close()关闭流 public void write(int c)向流中写入一个字符,写入字符存放于c的低16位 中 public void write(char cbuf)将字符数组cbuf的内容写入流 public abstract void write(char cbuf,int off,int len)将字符数组cbuf中从下标off开始的len个字符写入 流 public void write(String str)将字符串str写入流 public void write(String str,int off,int len)将字符串中从off开始的len个连续字符写入流 public abstract void flush()刷新流,强制输出缓冲区中的所有字符 public void reset()将流标记重置到上一次做标记处 n一般而言,Reader类和Writer类的方法通 常不能直接使用,而是通过其派生类来使用 。下面将介绍Reader类和Writer类的常用派 生类:FileReader类和FileWriter类、 BufferedReader类和BufferedWriter类。 3FileReader类和 FileWriter类 n(1)FileReader类 nFileReader类是一个以字符方式读取文件 内容的Reader类的派生类。若指定的文件不 存在则抛出FileNotFoundException异常。 构造方法功能描述 public FileReader(String name)以name为文件名创建FileReader对象 public FileReader(File file)以File对象为文件创建FileReader对象 nFileWriter类是一个以字符方式将数据写 入文件的Writer类的派生类, FileWriter对 象的创建不依赖于文件是否存在。如果文 件不存在,则首先创建文件,然后打开等 待输出。若试图打开一个只读文件,则抛 出IOException异常。 (2)FileWriter类 FileWriter类常用的构造方 法 构造方法功能描述 public FileWriter(String name)以name为文件名创建FileWriter对象,原 先的文件会被覆盖 public FileWriter(String fileName,boolean a)同上,但若a为true,则数据追加在原数 据之后 public FileWriter(File file)以File对象为文件创建FileWriter对象 【例2.4】利用FileReader类 和FileWriter类完成文件复制 / 使用FileReader类和FileWriter类完成文件复制Copy_File.java import java.io.*; public class Copy_File public static void main(String args) throws IOException char data=new char1024; / 建立可容纳1024个字符的数组 FileReader fr=new FileReader(“d:bookmouse.txt“); / 建立对象fr FileWriter fw=new FileWriter(“d:bookhello.txt“); int num=fr.read(data); / 将数据读入字符列表data内 fw.write(data); System.out.println(“复制的内容为:“); String str=new String(data,0,num);/ 将字符列表转换成字符串 System.out.println(str); fr.close(); fw.close(); 4BufferedReader类和 BufferedWriter类 n(1)BufferedReader类 nBufferedReader类继承自Reader类,用来读取 缓冲区里的数据。 n除了Reader类提供的基本方法外, BufferedReader类还提供了readLine()方法对整 行字符进行处理。 n使用BufferedReader类来读取缓冲区中的数据 之前,必须先创建FileReader对象,再以该对象 为参数创建BufferedReader类对象,然后才可利 用该对象读取缓冲区中的数据。 BufferedReader类常用的构 造方法 构造方法功能描述 public BufferedReader(Reader in)创建缓冲区字符输入流 public BufferedReader(Reader in,int sz)创建缓冲区字符输入流,并设置缓冲区大小 BufferedReader类的常用方 法 方法功能描述 public void close()关闭流 public int read()读取流中的一个字符 public int read(char cbuf)读取一系列字符到字符数组cbuf中 public int read(char cbuf,int off,int len)读取len个字符存放到字符数组cbuf从下标off开始 的位置 public long skip(long n)跳过n个字符 public String readLine()读取一行字符串 public boolean ready()测试流是否已准备好可以读取字符 public boolean markSupported()测试流是否支持mark()操作 public void mark(int numChars)在流的当前位置作标记,最多可回溯numChars个 字符 public void reset()将流标记重置到上一次做标记处 (2)BufferedWriter类 nBufferedWriter类继承自Writer类,用来将数据 写入缓冲区。 n使用BufferedWriter类将数据写入缓冲区时, 首先必须先创建FileWriter对象,再以该对象为参 数创建BufferedWriter类对象,然后即可利用该 对象将数据写入缓冲区。 n必须注意:缓冲区中的数据最后须调用flush() 方法将缓冲区清空,即将缓冲区中的数据全部强 制输出到文件中。 BufferedWriter类常用的构造 方法 构造方法功能描述 public BufferedWriter(Writer out)创建缓冲区字符输出流 public BufferedWriter(Writer out,int sz)创建缓冲区字符输出流,并设置缓冲区大小 BufferedWriter类的主要方 法 方法功能描述 public void close()关闭流 public void write(int c)向流中写入一个字符,写入字符存放于c 的低16位中 public void write(char cbuf,int off,int len)将字符数组cbuf中从下标off开始的len个字 符写入流 public void write(String str,int off,int len)将字符串中从off开始的len个连续字符写入 流 public void newLine()写入换行符 public void flush()刷新流,强制输出缓冲区中的所有字符 【例2.5】利用 BufferedReader类和 BufferedWriter类完成文件复 制 / 使用BufferedReader类和BufferedWriter类完成文件复制 import java.io.*; public class Copy_Filebuf public static void main(String args) throws IOException String data=new String(); FileReader fr=new FileReader(“d:bookmouse.txt“); FileWriter fw=new FileWriter(“d:bookhellobuf.txt“); BufferedReader br=new BufferedReader(fr); / BufferedWriter bw=new BufferedWriter(fw); while(data=br.readLine()!=null)/从文件mouse.txt中读取一行 System.out.println(data);/输出到显示器 bw.write(data);/将读取的数据写入文件hellobuf.txt bw.newLine();/写入一个换行符 bw.flush();/将缓冲区中数据全部输出到文件hellobuf.txt System.out.println(“文件复制完成!请查看相关文件内容!“); br.close(); bw.close(); 2.4 过滤流 n过滤流在读/写数据的同时可以对数据进行处理 ,如数据的缓冲、行的计数、预读一个字节的数 据等。另外它还提供了对象的同步机制,可保证 在某一时刻只有一个线程可以访问一个I/O流。以 防止多个线程对一个I/O流进行操作可能带来的严 重后果。 n在java.io包中,FilterInputStream和 FilterOutputStream类是所有过滤流类的父类, 是抽象类。它们为输入输出流提供了一个通用的 接口,其本身不能生成任何实例。 过滤流类继承关系 使用过滤流时,必须将此过滤流连接到某个输入/输出流上, 通过在构造函数的参数中指定所要连接的输入输出流来完成 。 1各种过滤流的子类 nBufferedInputStream类和BufferedOutputStream类: 实现了带缓冲的输入输出。缓冲输入输出是一个非常普 通的性能优化。使用BufferedInputStream类输入时,数 据先按块读入缓冲区,然后,读操作直接访问缓冲区。 缓冲区除了可以提高性能外,还可实现mark()、reset() 、skip()等方法。使用BufferedOutputStream类输出时 ,数据先写入缓冲区,当缓冲区满时,数据才会写入 BufferedOutputStream类所连接的输出流,当缓冲区未 满时,可调用flush()方法强制把缓冲区中的数据全部写 入输出流。 nDataInputStream类和DataOutputStream类: 这两个类不仅能读写数据流,且能用与机器无关 的格式读写Java语言的基本类型,如int、float等 。这些基本数据类型在文件中的表示方式和它们 在内存中的表示方式一样,无需多余转换。 nLineNumberInputStream类:在输入数据时, 将换行、回车处理为换行,并可对行计数。实现 了mark()、reset()、skip()等方法。 nPushbackInputStream类:调用FileInputStream 类的read()方法读取数据时,每读入一个字节,当前 读取位置就向后移动一个字节。在一些情况下,我 们往往需要先读入一字节以判断输入流的一些属性 ,然后在正式读取时再将全部数据读出,直接用 FileInputStream类就很不方便。 PushbackInputStream类提供的unread()方法,可将 刚读过的一个字节退回到输入流中去,以便于实现 全部数据的读取。 nPrintStream类:使用PrintStream流可输出一个基 本类型的数据。我们经常使用的标准输出流 System.out就是PrintStream类的一个对象,与标准 输出设备相关联。 【例2.6】各种过滤流的 使用 n/各种过滤流的使用。将字符串中的数字替换为换行后输出Filter_app.java nimport java.io.*; npu

温馨提示

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

评论

0/150

提交评论