




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第9章输入与输出一、输入输出类库 Java的输入输出功能必须借助于输入输出类库Java.io包来实现,这个包中的类大部分是用来完成流式输入输出的流类。 流 流是指在计算机的输入与输出之间的数据的序列,而Java中的数据流有位流(字节流)和字符流之分; 就流的运动方向而言,流可分为输入流(input stream)和输出流(output stream),输入流代表从外设流入计算机的数据序列;输出流代表从计算机流向外设的数据序列。1字节流:从InputStream和OutputStream派生出来的一系列类。这类流以字节(byte)为基本处理单位。2字符流:从Reader和Writer派生出的一系
2、列类,这类流以16位的Unicode码表示的字符为基本处理单位。一、 I/O流的层次二、InputStream 和OutputStream1InputStream 从流中读取数据:int read( ); /读取一个字节,返回值为所读的字节int read( byte b ); /读取多个字节,放置到字节数组b中,通常读取的字节数量为b的长度,返回值为实际读取的字节的数量。int read( byte b , int off, int len ); /读取len个字节,放置到以下标off开始字节数组b中,返回值为实际读取的字节的数量。int available( ); /返回值为流中尚未读取的
3、字节的数量long skip( long n ); /读指针跳过n个字节不读,返回值为实际跳过的字节数量 关闭流:close( ); /流操作完毕后必须关闭 使用输入流中的标记:void mark( int readlimit ); /记录当前读指针所在位置,readlimit表示读指针读出readlimit个字节后所标记的指针位置才失效void reset( ); /把读指针重新指向用mark方法所记录的位置boolean markSupported( );/当前的流是否支持读指针的记录功能InputStream类派生结构2OutputStream 输出数据:void write( int
4、b ); /往流中写一个字节bvoid write( byte b ); /往流中写一个字节数组bvoid write( byte b , int off, int len ); /把字节数组b中从下标off开始,长度为len的字节写入流中 flush( ) /刷空输出流,并输出所有被缓存的字节由于某些流支持缓存功能,该方法将把缓存中所有内容强制输出到流中。 关闭流: close( ); /流操作完毕后必须关闭OutputStream类的派生结构三、Reader 和Writer这两个类是抽象类,只是提供了一系列用于字符流处理的接口,不能生成这两个类的实例,只能通过使用由它们派生出来的子类对象来
5、处理字符流。1Reader类是处理所有字符流输入类的父类。 读取字符 public int read() throws IOException; public int read(char cbuf) throws IOException; public abstract int read(char cbuf,int off,int len) throws IOException; 标记流public boolean markSupported(); public void mark(int readAheadLimit) throws IOException; public void rese
6、t() throws IOException; 关闭流public abstract void close() throws IOException;Reader类的派生结构2 Writer类是处理所有字符流输出类的父类。 向输出流写入字符public void write(int c) throws IOException;public void write(char cbuf) throws IOException;public abstract void write(char cbuf,int off,int len) throws IOException;public void wri
7、te(String str) throws IOException;public void write(String str,int off,int len) throws IOException; flush( )刷空输出流,并输出所有被缓存的字节。 关闭流public abstract void close() throws IOException;Writer类的派生结构I/O中的例外:进行I/O操作时可能会产生I/O例外,属于非运行时例外,应该在程序中处理。如:FileNotFoundException, EOFException, IOException二、标准输入输出 Java系统
8、预先定义好3个流对象分别表示标准输出设备、标准输入设备和标准错误设备,它们分别是System.out,System.in和System.err。 System.out是它的一个静态属性,属于PrintStream类对象,用于输出字节数据流,对应标准输出设备:屏幕。System.in 也是System的一个静态属性,属于InputStream类对象,用于输入字节数据流,对应标准输入设备:键盘。System.err 也是System的一个静态属性,属于PrintStream类对象,用于系统错误信息的输出,对应屏幕。 Java实例标准输入import java.io.*;public class S
9、tandardIn1 public static void main(String args) throws IOException char c;System.out.println( 输入一个字符);c=(char)System.in.read(); System.out.print( 输入的字符是:+c); 标准输出 Java的标准输入设备:显示器用System.out表示,System.out属于PrintStream类对象。 利用PrintStream类的print()或println()方法可以非常方便地输出各类数据,这两个方法的唯一区别是print()输出后不换行,而printl
10、n()方法输出完毕后要换行 。三、文件操作 如果程序运行程序中,需要输入或者输出的信息量大,直接用键盘或显示器显然不大可行,此时可以采用文件。即将要输入的信息预先保留在磁盘文件中,程序运行时,直接从文件读入信息;程序的大量输出信息直接写入磁盘文件。为此,Java提供了功能强大的文件及目录操作功能。在程序中要对磁盘文件或目录进行操作,首先要对文件或目录建立连接,为此Java提供了File类。File类也位于java.io包中,但不是流类,而是专门用来管理磁盘文件和目录。 一个File类对象表示一个磁盘文件或目录,其对象属性中包含了文件或目录的相关信息,如名称、长度、所含文件个数等,其方法可以完成
11、对文件或目录的常用管理操作,如创建、删除等。 建立File对象File类提供了3个不同的构造方法 :File(String path) String类参数path指定所建对象对应的磁盘文件名或目录名及其路径名。路径名可以采用绝对路径,也可以采用相对路径。绝对路径是从根目录开始的路径,如c:jdk1.3example表示的c盘根目录下jdk1.3子目录下的example子目录。相对路径是从当前目录(运行程序的目录)开始的路径,例如examplenew表示当前目录下的example子目录的new子目录。如果当前目录为c:jdk1.3,则c:jdk1.3example和example代表同一路径,为
12、了程序的可移植性,采用相对路径较好。 例如:要为文件c:jdk1.3examplefile.txt建立一个File对象file1,可以采用如下形式的语句:File file1=new File(“c:jdk1.3examplefile.txt”)如果是在目录c:jdk1.3下运行程序,也可以使用相对路径建立file1对象:File file1=new File(“examplefile.txt”)如果要为卢姆d:java建立一个File对象,可以采用以下语句序列:String path=“d:java”File dir1=new File(path)注意:为文件建立File对象时,目录之间的分
13、隔符号在windows环境下为“”File(String path, String name) 此构造方法中的参数path表示文件或目录的路径,参数name表示文件或目录名。例如,为文件 c:jdk1.3exampleoldfile.txt和c:jdk1.3examplenewfile.txt分别建立File对象file1和file2,可以采用以下语句序列: String path=“c:jdk1.3example” File file1=new File(path,”oldfile.txt”); File file2=new File(path,”newfile.txt”); File(Fi
14、le dir, String name) 此构造方法中的参数dir表示一个磁盘目录对应的File对象,参数name表示文件名或目录名。 File类主要方法public String getName():得到文件的名字 public String getPath():得到文件的路径名 public boolean exists():判断文件或目录是否存在 public long length():返回文件的字节数 public boolean canRead():返回当前文件是否可写 public boolean canWrite():返回当前文件是否可读 public boolean equa
15、ls(File file):比较文件或目录 public boolean isFile():检测是否是文件 public boolean isDirectiry():检测是否是目录 public boolean renameTo(File file):重命名文件 public void delete():删除文件 FileOutputStream类流FileOutputStream流类的构造方法有两个: FileOutputStream(String fileName):参数fileName表示带路径的磁盘文件名。 FileOutputStream(File file):参数file表示为磁盘
16、文件所建立的File对象名 Java实例FileOutputStreamimport java.io.*;public class File2 public static void main(String args) throws IOExceptionchar ch;File file1=new File(c:jdk1.3examplenewFile.txt);try FileOutputStream fout= new FileOutputStream(file1); System.out.println(输入任一字符串,以?结束); ch= (char) System.in.read()
17、; while (ch !=?) fout.write(ch); ch=(char) System.in.read(); fout.close();catch (FileNotFoundException e) System.out.println(e);catch (IOException e) System.out.println(e); FileInputStream类流FileInputStream流类的构造方法有两个: FileInputStream(String fileName): 参数fileName表示带路径的磁盘文件名。 FileInputStream(File file)
18、:参数file表示为磁盘文件所建立的File对象名 。Java实例FileInputStreamimport java.io.*;public class File3 public static void main(String args) throws IOExceptionint ch;File file1=new File(c:jdk1.3examplenewFile.txt);tryFileInputStream fin= new FileInputStream(file1);System.out.println(文件中的信息为:);ch= fin.read();while (ch !
19、=-1) System.out.print(char)ch); ch =fin.read(); fin.close();catch (FileNotFoundException e) System.out.println(e); catch (IOException e) System.out.println(e); DataOutputStream类流 使用DataOutputStream类向文件中写入各种类型数据的操作步骤是: 为磁盘文件建立File类对象; 为该File对象建立FileOutputStream类流对象,建立其与磁盘文件的连接;为该FileOutputStream类对象建立
20、DataOutputStream类对象,利用DataOutputStream类的writeInt(),writeFloat(),writeDouble(),writeBoolean()等方法分别向文件中写入整型、单精度型、双精度型、布尔型等数据; 写入操作完成后,利用close()方法将流关闭,断开与磁盘文件的联系。 Java实例DataOutputStreamimport java.io.*;public class File4 public static void main(String args) int ch;InputStreamReader iin=new InputStreamR
21、eader(System.in);BufferedReader bin =new BufferedReader(iin);File file1=new File(c:jdk1.3exampledataFile.txt);tryFileOutputStream fout= new FileOutputStream(file1);DataOutputStream dout =new DataOutputStream(fout);System.out.println( 输入整数);int i=Integer.parseInt(bin.readLine(); System.out.println( 输
22、入浮点数); Java实例(续)float f=Float.parseFloat(bin.readLine();System.out.println( 输入布尔量);boolean b=new Boolean(bin.readLine().booleanValue();dout.writeInt(i);dout.writeFloat(f);dout.writeBoolean(b);dout.close(); catch (FileNotFoundException e) System.out.println(e);catch (IOException e) System.out.println(e); Writer和Reader 以字符流方式向文件写入或从文件中读取数据,可以使用Writer和Reader类及其子类。 W
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿园防踩踏安全教育演练方案
- 零障碍数学课件
- 2025年中国平行铁市场调查研究报告
- 回迁协议房子买卖合同
- 复合肥供货合同协议
- 器械租赁协议合同模板
- 工程合同拨款补充协议
- 药品搬运合同协议
- 场馆租借合同协议
- 土方交易合同协议
- 跨国公司与全球治理智慧树知到期末考试答案章节答案2024年山东大学
- 山西省2024届高三适应性考试二(二模) 英语试卷(含答案)+听力音频+听力材料
- 建筑史智慧树知到期末考试答案2024年
- 美国特勤局工作总结
- 新版医疗机构消毒技术规范
- 【波司登羽绒服公司员工招聘问题调研8500字】
- 制度梳理表(总表)
- 睾丸肿瘤课件
- 医学伦理审查委员会的组成与职能
- 终端导购培训-高级导购销售培训
- 空调冷却冷冻水管道系统详细的施工方案设计
评论
0/150
提交评论