版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Java面向对象程序设计,主讲教师:郑大庆 上海财经大学 信息管理与工程学院,第十讲 Java的输入和输出,2,上海财经大学 信息管理与工程学院,主要方式、范围,流式I/O基础 随机读取文件 Java文件管理 对象输入/输出流,3,上海财经大学 信息管理与工程学院,输入输出的基本概念,程序与用户之间的沟通桥梁 程序接受输入:磁盘,内存,外设(键盘) 程序输出:磁盘,外设(屏幕,打印机),4,上海财经大学 信息管理与工程学院,流:从源到目的的字节的有序序列,先进先出。 Java中的输入输出是以流的方式处理,顺序读取。,流(Stream)的概念,流的方向性,5,上海财经大学 信息管理与工程学院,流
2、操作的过程,Reading: open a stream while (more data) read data close the stream,Writing : open a stream while (more data) write data close the stream,6,上海财经大学 信息管理与工程学院,基本类,两种基本流(抽象类): 输入流(InputStream, read) 输出流(OutputStream, write) 基本类中定义了完成基本I/0操作的抽象方法 读写操作:read(),write() 关闭流的操作:close() 强制送出并清空缓冲区数据的操作:
3、flush() 输入/输出流:标准类,位于java.io包中 流的读操作过程:打开流执行读操作 关闭流 流的写操作过程:打开流执行写操作 关闭流,7,上海财经大学 信息管理与工程学院,流的分类:字节流和字符流,流式I/O类根据操作的数据类型(16位字符或字节)分成两个层次体系。 字节流:数据以8位字节为单位进行读写 字符流:数据以16位字符(Unicode)为单位进行读写 (Java中通常指的流是字节流),8,上海财经大学 信息管理与工程学院,流的分类:两种结构的流,节点流(Node Stream ):从特定源(如磁盘文件或内存某区域)进行读或写入。 过滤流(Filter Steam):使用其
4、它的流作为输入源或输出目的地。,l l e h,o,节点流(输入),过滤流(输入),其他流,源,9,上海财经大学 信息管理与工程学院,节点流,过滤流,注:,字节流输入流类层次,10,上海财经大学 信息管理与工程学院,是所有表示输入字节流类的父类(抽象类) 适于读取面向字节的数据(字节流) 三个基本read()方法 int read()/从输入流中读一个字节并返回(-1表示文件结束) int read(byte b) /从输入流中连续读多个字节到数组b中, 返回读的字节数 int read( byte b, int off, int len ) /从输入流中读len个字节到数组b中。off是写入
5、数组的位置。,InputStream,11,上海财经大学 信息管理与工程学院,其它方法 void close( ) /关闭流。对于过滤流,则自顶向下关闭之 int available() /返回未读的字节数 long skip(long n) / 跳过n个字节 boolean markSupported( ) /测试打开的流是否支持书签(回读) void mark(int i) /标记当前流,并建立大小为i的缓冲区 void reset( ) / 返回标签处,InputStream,12,上海财经大学 信息管理与工程学院,节点流,过滤流,注:,字节流输出流类层次,13,上海财经大学 信息管理与
6、工程学院,OutputStream是所有表示输出字节流类的父类。 功能:接受要输出的字节并将它送往目的地。 三个基本的write( )方法 void write() / 向输出流写一个字节 void write(byte b) /向输出流写一个字节数组 void write(byte b, int off, int len ) 其它方法 void close( ) void flush( ) / 强行将缓存数据写出去,一般在调用close()方法关闭流前,可以先调用flush()方法。,OutputStream,14,上海财经大学 信息管理与工程学院,Reader和Writer:字符流的两个抽
7、象超类 Reader和Writer 类实现字节和字符间的自动转换。 每一个核心输入、输出流字节流,都有相应的Reader和Writer版本。例如: FileInputStream (字节流)FileReader (字符流)PipedInputStream (字节流)PipedReader (字符流),字符流,一般规律:由XXXReader/Writer替代XXXInputStream/OutputStream,15,上海财经大学 信息管理与工程学院,节点流,过滤流,注:,Reader的类层次,16,上海财经大学 信息管理与工程学院,int read();/读一个字符并将它作为int型数返回给调
8、用语句(-1表示文件结束) int read(char cbuf);/读字符放入数组中 int read(char cbuf, int off, int len);/读字符放入数组的指定位置 void close( ) /关闭流。 long skip(long n) / 跳过n个字符 boolean markSupported( ) /测试打开的流是否支持书签(回读) void mark(int) /标记当前流,并建立int大小缓冲区 void reset( ) / 返回标签出 boolean ready() /测试当前流是否准备好进行读,Reader的基本方法,17,上海财经大学 信息管理与
9、工程学院,节点流,过滤流,注:,Writer的类层次,18,上海财经大学 信息管理与工程学院,int write(int c) ; / 写单个字符 int write(char cbuf) ;/ 写字符数组 int write(char cbuf, int off, int len) ; int write(String str) ; int write(String str, int off, int len) ; void close( ) void flush( ) / 强行将缓存数据写出,Writer的基本方法,19,上海财经大学 信息管理与工程学院,Reader 和 InputStr
10、eam以及Writer 与 OutputStream定义的API类似,但操作的数据类型不同,每个核心的输入输出字节流,都有对应的输入输出字符流。 所有的流InputStream、 OutputStream 、Reader、 Writer 在创建时自动打开;程序中可以调用close方法关闭流,否则Java运行环境的垃圾收集器将隐含将流关闭。 字节流适用于读取二进制数据,例如图像和声音数据,限于处理ISO-Latin-1的8位字节;而字符流能够处理Unicode字符集中的所有字符,应该使用字符流来读写文本类型数据。,比较:字节流与字符流,20,上海财经大学 信息管理与工程学院,节点流类,21,上海
11、财经大学 信息管理与工程学院,过滤流类1,22,上海财经大学 信息管理与工程学院,过滤流类1,23,上海财经大学 信息管理与工程学院,输入/输出流的套接,流的使用经常会出现套接的现象,利用各种流的特性共同处理数据,套接的多个流构成了一个流链。,输入/输出流链示例,24,上海财经大学 信息管理与工程学院,作用:对文件系统中的文件进行读写,属于节点流 文件流类包括:FileReader,FileWriter, (字符流) FileInputStream,FileOutputStream(字节流) 创建文件流:常用文件名或File类的对象创建文件流。文件流的创建调用了相应类的构造方法,并经常以字符串
12、形式的文件名或一个File类的对象作为参数。 构造方法: public FileInputStream(String name); FileInputStream in= new FileInputStream(“myfile.txt”); public FileInputStream(File file); File f=new file(“myfile.txt”); FileInputStream in= new FileInputStream(f);,常用I/O流(一):文件流,25,上海财经大学 信息管理与工程学院,例7-1. 利用字节流 FileInputStream,FileOut
13、putStream 实现文件复制。 例7-2. 利用字符流FileReader,FileWriter实现文件复制。,文件流:例,26,上海财经大学 信息管理与工程学院,管道:用来把一个线程的输出连接到另一个线程的输入 属于节点流 PipedReader/PipedInputStream实现管道的输入端 PipedWriter/PipedOutputStream实现管道的输出端 管道流模型:,常用I/O流(二):管道流,数据传输方向,数据传输方向,27,上海财经大学 信息管理与工程学院,管道由输出端(管道输出流)与管道输入端(管道输入端)连接而成,管道的连接实际是管道的输入流指向管道的输出流,或
14、者输出流指向输入流。 将一个线程的输出流直接挂在另一个线程的输入流, 建立管道,实现线程间数据交换。 PipedInputStream pin= new PipedInputStream( ); PipedOutputStream pout = new PipedOutputStream(pin); PipedInputStream pin= new PipedInputStream( ); PipedOutputStream pout = new PipedOutputStream(); pin.connect(pout); /实现输入输出管道流间的挂接 或pout.connect(pin)
15、;,管道流的创建,28,上海财经大学 信息管理与工程学院,Rhymingwords.java,输入一组单词,先将每个单词逆序, 再将所有单词排序,最后将这些单词逆序输出。 程序处理流程: Reader rhymedWords = reverse(sort(reverse(words); 分别创建了Reverse,sort, reverse 三个线程,管道流示例,29,上海财经大学 信息管理与工程学院,示例中的管道流,public static Reader reverse(Reader source) throws IOException BufferedReader in = new Buf
16、feredReader(source); PipedWriter pipeOut = new PipedWriter(); PipedReader pipeIn = new PipedReader(pipeOut); PrintWriter out = new PrintWriter(pipeOut); new ReverseThread(out, in).start();,在Reverse方法中创建并启动Reverse线程,将管道中的输出流传递给该线程做为其输出流;将管道中的输入流作为返回值传递给Sort方法,作为Sort方法中启动的sort线程的输入流。,30,上海财经大学 信息管理与工程
17、学院,包括:BufferedInputStream/BufferedOutputStream; BufferedReader/BufferedWriter; 数据从原始流成块读入或将数据积累到一个大数据块后再成批输出。减少读写次数,提高程序执行效率。 是过滤流,需给出前端(后端)流. 构造方法: public BufferedInputStream(InputStream in); public BufferedInputStream(InputStream in, int size);,常用I/O流(三) :缓存流,31,上海财经大学 信息管理与工程学院,缓存流,BufferedInputS
18、tream/BufferedOutputStream 基本方法: int read() /读一个字节 int read( byte, int offset, int length ) /读若干字节放入数组 int write(int c) void write(byte , int offset, int length ) BufferedReader增加readLine( ) 方法, 读一行字符返回。 见后面标准I/O例7-5,32,上海财经大学 信息管理与工程学院,作用:对于基本数据类型进行有格式的读写 包括DataInputStream和DataOutputStream,属于过滤流 注意
19、:DataOutputStream 与DataInputStream一般要配套使用 DataInputStream方法 byte readByte( )boolean readBoolean( ) long readLong( )char readChar( ) double readDouble( )float readFloat( ) short readshort( )int readInt( ) DataOutputStream 方法 void writeByte(byte)void writeBoolean(boolean) void writeLong( long )void wr
20、iteChar(char) void writeDouble(double)void writeFloat( float) void writeshort(short)void writeInt ( int) void writeBytes(String)void writeChars(String ),常用I/O流(四):数据流,33,上海财经大学 信息管理与工程学院,import java.io.*; 例7-4 public class DataIOTest public static void main(String args) throws IOException / 将输出数据流ou
21、t挂接到文件invoice1.txt DataOutputStream out = new DataOutputStream(new FileOutputStream(invoice1.txt); double prices = 19.99, 9.99, 15.99, 3.99, 4.99 ; int units = 12, 8, 13, 29, 50 ; String descs = Java T-shirt, Java Mug, Duke Juggling Dolls, Java Pin, Java Key Chain ;,数据流:示例,34,上海财经大学 信息管理与工程学院,for (i
22、nt i = 0; i prices.length; i +) out.writeDouble(pricesi);/以double类型写入一个值 out.writeChar(t); /以字符形式写入tab out.writeInt(unitsi); /按int类型写入一个值 out.writeChar(t); out.writeChars(descsi); out.writeChar(n); out.close(); /关闭输出流 / 将输入数据流in挂接到文件invoice1.txt DataInputStream in = new DataInputStream(new FileInput
23、Stream(invoice1.txt); double price; int unit; String desc; double total = 0.0;,35,上海财经大学 信息管理与工程学院,try while (true) price = in.readDouble(); /读入输入流中的一个double型数据 in.readChar(); / 丢弃 tab unit = in.readInt(); in.readChar(); / 丢弃 tab desc = in.readLine(); System.out.println(Youve ordered + unit + units
24、of + desc + at $ + price); total = total + unit * price; catch (EOFException e) System.out.println(For a TOTAL of: $ + total); in.close(); ,Youve ordered 12 units of Java T-shirt at $19.99 Youve ordered 8 units of Java Mug at $9.99 Youve ordered 13 units of Duke Juggling Dolls at $15.99 Youve ordere
25、d 29 units of Java Pin at $3.99 Youve ordered 50 units of Java Key Chain at $4.99 For a TOTAL of: $892.88,运行结果:,36,上海财经大学 信息管理与工程学院,JAVA系统的标准输入/输出,用于基本系统操作的类System public final class java.lang.System extends java.lang.Object System类所有属性和方法都是静态的,即可以通过使用类名直接调用。,37,上海财经大学 信息管理与工程学院,System类,System类包含三个I
26、/O流成员用于系统标准输入/输出(使用户无需频繁地创建流对象来进行I/O) public static InputStream System.in 用于输入字节数据流,对应标准输入设备键盘 System.in.read() /从键盘读入数据;程序挂起 public static PrintStream System.out 用于输出字节数据流,对应标准输出设备屏幕 System.out.println() /向屏幕输出数据 public static PrintStream System.err 用于输出系统错误信息,对应标准输出设备屏幕,38,上海财经大学 信息管理与工程学院,标准I/O,标
27、准输入System.in.read() 从键盘读入一个字符。返回整型值(低位字节是数据,高位为0)。 标准输出 println()方法 Print()方法 也可从其它流读入数据。例7-5,39,上海财经大学 信息管理与工程学院,标准文件类: File,File类的对象对应于文件系统中的一个目录或文件; File类用来操纵文件和获得文件的信息,对象描述文件路径、名字、长度、可否读写等属性,可用来命名文件、查询文件属性和处理目录,但不读写文件(由文件流类实现) File类实现文件的管理(创建,删除,更名等),40,上海财经大学 信息管理与工程学院,创建新的文件对象,3种构造方法 public Fi
28、le(string pathname) File f1 = new File(“c:workmyfile.txt”); /绝对路径 File f2 = new File(“mydirdir1”); /相对路径,移植性较好 public File(string parent, string child) mydir= new File(“d:FatherDir”, “SonDir”); 参数parent指定了文件或目录的父目录的绝对路径或相对路径,参数child指定了文件或目录名。 public File(File parent, string child) File f3 = new File
29、(f2, “myfile1.txt”); ,文件类:对象的创建,41,上海财经大学 信息管理与工程学院,与文件名有关的操作 String getName( ) String getAbsolutePath( ) /绝对路径 String getPath( ) /相对路径 String getParent( ) boolean renameTo( File newName)/重命名文件 文件信息测试 boolean exists( ) /判断文件是否存在 boolean canWrite( ) boolean canRead( ) boolean isFile( ) boolean isDire
30、ctory( ) /判断是否目录 boolean isAbsolute( ),文件类:文件测试与实用方法,42,上海财经大学 信息管理与工程学院,文件类:文件测试与实用方法,获取文件一般信息与常用操作 Public long length() Public long lastModified() Public boolean delete()/删除文件或目录 目录操作 Public string list()/将目录中所有文件名称保存在字符数组中返回 Public boolean mkdir(),43,上海财经大学 信息管理与工程学院,例7-6,44,上海财经大学 信息管理与工程学院,随机访问
31、文件:RandomAccessFile类,不属于InputStream/OutputStream 用于访问本地文件,可以实现对数据的随机访问(而不是顺序访问) 可读可写 同时实现了DataInput和DataOutput接口,可进行有格式的读写 public class RandomAccessFile implements DataInput, DataOutput,45,上海财经大学 信息管理与工程学院,RandomAccessFile类,DataInput接口 读取基本类型的数据,或读取一行数据,如:readBoolean( )、readInt( )、readLine( ) 等 Data
32、Output接口 写入基本类型的数据,或写入一定长度的字节数组,如writeChar(),writeDouble() 等。,46,上海财经大学 信息管理与工程学院,RandomAccessFile类:常用方法,读写文件操作:readXx(),writeXx实现DataInput/Output接口 byte readByte() 读一字节 char readChar() 读一字符(Unicode码2个字节) double readDouble() 读双精度数(8个字节) readLine () 读一行文本 writeChar(), writeInt(),47,上海财经大学 信息管理与工程学院,2
33、种构造方法,创建时指定对应某一文件完成读或写操作 RandomAccessFile(String name, String mode); RandomAccessFile s1=new RandomAccessFile(“a.txt”, “r”); RandomAccessFile(File file, String mode); File f1=new File(“a.txt”); RandomAccessFile s2=new RandomAccessFile(f1, “rw”);,“r”, “rw”,随机存取文件类的创建,“r”以只读方式打开文件;“rw”以读写方式打开文件; rwd,
34、rws,48,上海财经大学 信息管理与工程学院,RandomAccessFile类:常用方法,指针操作 long getFilePointer() 返回相对于文件头的位移量(字节) void seek(long pos) 从文件头移动指针(字节) int skipBytesint(int n) 移动指针(字节) length() 返回文件长度,49,上海财经大学 信息管理与工程学院,例7-7,50,上海财经大学 信息管理与工程学院,对象的串行化:对java对象的读/写过程 串行化的目的: 实现对象的永久化 定义:把对象(从内存)保存到外存,称为永久化 目的:将对象的状态(变量)以串行格式表示并
35、保存,以便以后需要时重构该对象 远程方法调用(RMI):实现java远程对象间的通讯。 在远程对象的互操作中,有时需要传输对象,对象的串行化(Object Serialization),51,上海财经大学 信息管理与工程学院,对象的串行化:条件,如何进行Object serialization? 实现Serializable接口只有实现了Serializable接口的类,其对象才可以被序列化 public abstract interface Serializable Java中定义的标准对象流(均实现了Serializable接口) ObjectOutputStream writeObject( ) ObjectInputStream readObject( ),52,上海财经大学 信息管理与工程学院,对象串行化的方法:对象输出,ObjectOutputStream(过滤流) public final void writeObject(Object obj ) throws IOException 把对象写入对象输出流 例7-8 对象不可串行化时,抛出NotSerializableException异常 void writeByte() void writeInt() void writeC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年药事管理与法规考前冲刺卷
- 关于企业社会责任活动汇报函(7篇)
- 有关2026年新产品研发项目进度确认函(8篇)范文
- 2026年共青团检测考试题库附答案
- 2026年共青团入团自省素养考试题库附答案
- 2025年营销类综合专业能力测试试卷(市场营销品牌)试题及答案
- 2025安徽滁州市来安县招聘国有企业人员和政府购买服务人员21人笔试历年参考题库附带答案详解
- 2025四川绵阳科技城新区下属国有企业科服公司公开招聘13名工作人员笔试历年参考题库附带答案详解
- 2025中国铁路上海局集团有限公司成熟人才招聘笔试历年参考题库附带答案详解
- 2025中国科学院山西煤炭化学研究所招聘3人笔试历年参考题库附带答案详解
- 煤矿安全生产标准化管理体系2024版与2026版对比分析报告
- 2026年湖南省岳阳市高一下学期期末考试数学试卷(含参考答案)
- 2025-2026学年第二学期统编版四年级语文期末学业水平检测卷
- 骨科关节置换手术诊疗指南及操作规范(2025版)
- 【Y小区燃气管网的庭院管网的水力计算案例3100字】
- 2026中期展望·宏观篇:上半场的预期差下半场的破局点
- 2025-2026学年人教版地理七年级下册期末考点热点以及答题模板总结
- 2026年辽宁现代服务职业技术学院单招职业技能测试题库及答案详解1套
- 2026年版初中历史八年级下册复习提纲(表格型)
- 二级公共营养师《专业技能》试卷真题及解析(2026年)
- 中级统计师《统计基础理论及相关知识》真题及解析(2026年)
评论
0/150
提交评论