已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十章 输入和输出,10.1 流的基本概念,输入输出是用户和程序员交互的重要手段, 也是程序设计语言的一种基本操作.Java中的 输入输出是通过流来实现的,流包括输入流和 输出流.输入流(input stream)是数据从外部设 备到计算机,而输出流(output stream)是数据 从计算机到外部设备.,10.2 字节流与字符流,Java中的流根据处理的数据的不同分为字节流和 字符流.字节流按照字节(8位)传输,字符流按照字符 (16位)传输. 10.2.1 字节流 处理字节流的类有InputStream和OutputStream 以及它们的子类, InputStream提供read()方法, OutputStream提供write()方法.字节流类的继承关 系如下图:,字节流的类层次结构,10.2 字节流与字符流(续),10.2.2 字符流 Reader和Writer是字符流的抽象超类. Reader提供抽象方法read(char cbuf), Writer提供抽象方法write(char cbuf).字符 流类的继承关系下图: 例:FileInputStreamDemo.java FileWriterDemo.java,读取器和写出器的类层次结构,10.3 节点流与处理流,Java中的流根据功能不同分为节点流和处理流. 10.3.1 节点流 节点流是从特定地方读写的流类,它和具体的存放 地(文件,内存,管道)相关联.节点流又包括字节型的节 点流和字符型的节点流. 1.面向字节的节点流 文件 FileInputStream, FileOutputStream 内存(数组) ByteArrayInputStream, ByteArrayOutputStream 管道 PipedInputStream, PipedOutputStream,10.3 节点流与处理流(续),2.面向字符的节点流 文件 FileReader, FileWriter 内存(数组) CharArrayReader, CharArrayWriter 内存(字符串) StringReader, StringWriter 管道 PipedReader, PipedWriter 例:TestNodeStream.java使用字符型节点流FileReader的一个例子,10.3 节点流与处理流(续),10.3.2 处理流 处理流是连接在已存在的流之上,通过对数据的 处理为程序提供更强大的读写功能。处理流也有面 向字符和面向字节之分: 1.面向字节的处理流 常用的有: BufferedInputStream, BufferedOutputStream, DataInputStream, DataOutputStream,10.3 节点流与处理流(续),2.面向字符的处理流 常用的有: BufferedWriter BufferedReader InputStreamReader OutputStreamWriter,10.3 节点流与处理流(续),System.in中提供的read()方法一次只能读取一个字节或 按照byte类型的数组来读取,若想一次读入一行,则可以将其 作为参数传递给其他输入流,这些流称为处理流或过滤流. 类BufferedReader提供了readLine()方法可以一次从流 中读一行,其构造方法的参数为Reader.而类InputStream Reader是Reader的子类,其构造方法的参数为InputStream. 因而可以将System.in先传给处理流InputStreamReader,再 传给处理流BufferedReader. 例:ConvertStream.java,从键盘一次读取一行文本,每读一行 就将该行回显在屏幕上,最后用Ctrl+Z结束程序的执行,10.4 标准输入流与标准输出流,“标准输入与标准输出”的意思是:一个程序只使用 一个信息流.即所有输入都是从”标准输入”进来的,所 有输出都从”标准输出”出去,所有错误信息都送到”标 准错误”里. 对于一般的系统,标准输入通常是键盘,标准输出 通常是显示器屏幕. Java预先定义了3个标准流对象, 分别与系统的标准输入,标准输出和标准错误相连接, 它们被定义为System类的三个静态常量属性,分别 为System.in, System.out, System.err.,10.4 标准输入流与标准输出流(续),10.4.1 标准输入流 Java的标准输入System.in是InputStream类的对象,当程 序需要从键盘读取一个字节的数据时,只需调用System.in的 read()方法,例: char ch=(char)System.in.read(); 在使用System.in.read()方法读入数据时,需注意以下几点: (1)read()方法可能会抛出异常,因此要么指定向上抛出异常,要么用try语句显式处理异常,例: try char ch=(char)System.in.read(); catch (IOException e) /对异常处理,10.4 标准输入流与标准输出流(续),(2)当键盘缓冲区中没有未被读取的数据时,执行System.in.read()将导致线程转入阻塞状态,在阻塞状态下,当前流程将停留在上述语句位置且整个程序被挂起,等待用户输入一个数据后,才能继续;所以程序中有时利用System.in.read()语句来达到暂时保留屏幕的目的,例: System.out.println(Press any key to continue:); try char test=(char)System.in.read(); catch(IOException e) ,10.4 标准输入流与标准输出流(续),(3)执行System.in.read()方法将从键盘缓冲区读入一个字节的数据,而返回的却是32位的整数,需要注意的是只有这个整数的低位字节是真正输入的数据,其高位字节全是零. 例:Echo.java从键盘读取一个整数并回显在屏幕上.,10.4 标准输入流与标准输出流(续),import java.io.*; public class Echo public static void main(String args) try BufferedReader in = new BufferedReader( new InputStreamReader(System.in); System.out.print(“Please enter an integer:“); String s= in.readLine(); int i= Integer.parseInt(s); System.out.println(“You have entered an integer:“+i); catch(NumberFormatException e) System.out.println(“Number format error!“); catch(IOException e) System.out.println(e.toString(); ,10.4 标准输入流与标准输出流(续),10.4.2 标准输出流 System.out是PrintStream类的对象,PrintStream类是过 滤输出类FilterOutputStream的子类,其中定义了向屏幕输 送不同类型数据的方法print()和println(). println()共有十种重载的形式,可以输出不同类型的变量或 对象,包括boolean,byte,char,double,float,int,long和short 类型以及String, Object 类的对象,其基本形式为: public void println( ); 另外还有一个参数为空的println()方法,表示换行 print()方法有九种重载的形式,与println()基本相同,只是 没有参数为空的print()方法.,10.4 标准输入流与标准输出流(续),例:从键盘读取的单个字母转换成大写后,在标准输出设备上输出. import java.io.*; class LowerToUpper public static void main(String args ) char ch; try boolean b;,10.4 标准输入流与标准输出流(续),do b=false; System.out.print(“Please enter a lowercase:“); ch=(char)System.in.read(); if (!Character.isLowerCase(ch) b=true;System.in.skip(2) ; else System.out.println(ch+“ to uppercase is: “+ Character.toUpperCase(ch); while (b); catch(IOException e) System.out.println(“ Input error !“); ,10.4 标准输入流与标准输出流(续),10.4.3 输入输出重定向 Java的System类还提供了3个重定向标准输入,标准输出 和标准错误的静态方法: public static void setErr(PrintStream err) public static void setIn(InputStream in) public static void setOut(PrintStream out) 有时我们不希望从键盘读取数据或将数据输出到屏幕上, 而是希望从某个文件中读取数据或者是将某些数据写到某个 文件当中,这个时候就可以用输入输出重定向. 例:Redirecting.java 对输入输出进行重定向,10.5 文件,在对输入/输出的处理中,最常见的是对文件的操作. 通过一个对文件的打开操作,流就与特定的文件建立了 联系,程序便可以通过流与文件交换信息了. 10.5.1 文件与目录管理 Java语言不但支持文件管理,而且还支持目录管理. 在Java语言中,它们都是由专门的类java.io.File来实 现. 每个File类的对象表示一个磁盘文件或目录,其对象 属性中包含了文件或目录的相关信息,如名称,长度,所 含文件个数等,调用它的方法可以完成对文件或目录的 常用管理操作,以下为File类的常用方法:,10.5 文件(续),1.构造函数 File类共提供了三个不同的构造函数: (1)File(String ) 参数pathname指定新创建的File对象指向的磁 盘文件或目录的路径. 例:File f1 = new File (“D: java2“); String s = “java2myfirst“; File f2 = new File(s);,10.5 文件(续),(2)File(String ,String ) parent表示所对应的文件或目录的绝对或相对路 径,child表示文件或目录名. 例:File f3=new File(“java2myfirst“,“first.java“);,10.5 文件(续),(3)File(File ,String ) parent表示一个已经存在的代表某磁盘目录的 File对象,表示文件或目录的路径,child表示文件或 目录名.例: String sdir =“java2myfirst“; String sfile = “first.java“; File Fdir = new File(sdir); File Ffile = new File(Fdir, sfile);,10.5 文件(续),(4)File(URI uri) uri表示一个URI(Uniform Resourse Identifier)地址,将该地址转换成绝对路 径所得的文件创建一个File对象.,10.5 文件(续),2.获取文件或目录属性的方法 (1)判断文件或目录是否存在 public boolean exists() (2)判断是文件还是目录 public boolean isFile() public boolean isDirectory() (3)获取文件或目录名称与路径 public String getName() public String getPath(),10.5 文件(续),(4)获取文件长度 public long length() (5)获取文件读写属性 public boolean canRead() public boolean canWrite() (6)列出目录中的文件 public String list() (7)比较两个文件或目录 public boolean equals(File f),10.5 文件(续),3.文件或目录操作的方法 (1)重命名文件 public boolean renameTo(File newFile) (2)删除文件 public void delete() (3)创建目录 public boolean mkdir() public boolean mkdirs() 例:FileOperation.java 使用File类中的常用方法,10.5 文件(续),10.5.2 文件输入输出流 文件输入输出流用于读写文件,常用的流类为: java.io.FileInputStream java.io.FileOutputStream,10.5 文件(续),通常,利用文件输入输出流读写磁盘文件应遵循 如下的步骤: 1.利用文件名字符串或File对象创建输入输出流对 象.以FileInputStream为例,它有两个常用的构造函 数: FileInputStream(String FileName)throws FileNotFoundException FileInputStream(File f) throws FileNotFoundException,10.5 文件(续),2.从文件输入输出流中读写数据 从文件输入输出流中读写数据有两种方式:一是直 接利用FileInputStream和FileOutputStream自身 的读写功能;另一种是以FileInputStream和 FileOutputStream为原始数据源,再套接上其他功 能强大的输入输出流完成文件的读写功能.为了能更 方便地从文件中读写不同类型的数据,一般都采用第 二种方法,常借助过滤流的子类DataInputStream和 DataOutputStream来实现对不同类型数据的读写.,10.5 文件(续),3.关闭文件输入输出流与文件的连接 例:CopyFile.java 复制文件 import java.io.*; public class CopyFile public static void main(String args )throws IOException int i; FileInputStream fin; FileOutputStream fout; try fin=new FileInputStream(args0); catch (FileNotFoundException e) System.out.println(“Input File Not Found“); return; ,10.5 文件(续),try fout=new FileOutputStream(args1); catch(FileNotFoundException e) System.out.println(“Error Opening Output File“); return; while (i=fin.read()!= 1) fout.write(i); fin.close(); fout.close(); ,10.5 文件(续),注:当用FileOutputStream的不带参数的构造函数创建文件输出流时,如果文件已存在,那么该创建将文件的长度截为0.若不希望破坏文件原有内容,则可以使用下面的构造函数: public FileOutputStream(File file,boolean append)throws FileNotFoundException public FileOutputStream(String name, boolean append)throws FileNotFoundException,10.5 文件(续),10.5.3 随机访问文件流 对于类FileInputStream和FileOutputStream来 说,它们的对象都是顺序访问流,即只能对文件进行 顺序访问.若想对文件进行随机读写,则需使用 RandomAccessFile类,它直接继承自Object类,且 实现了DataInput和DataOutput接口,以下是该类的 主要方法:,10.5 文件(续),1.构造函数 RandomAccessFile(File file,String mode)throws FileNotFoundException RandomAccessFile(String name,String mode)throws FileNotFoundException,10.5 文件(续),参数mode指定RandomAccessFile对象可以以 何种方式打开和访问文件. mode有4种取值: r 表示以只读方式打开文件 rw 表示以读写方式打开文件 rwd 表示以读写方式打开文件,对文件数据的任何改变都被立即写入物理设备 rws 表示以读写方式打开文件,对文件数据或元数据(添加到程序元素上的额外信息)的任何改变都被立即写入物理设备 例:File fileName=new File(“BankFile.txt”); RandomAccessFile myRAF=new RandomAccessFile(fileName,”rw”),10.5 文件(续),2.操作文件指针的方法 RandomAccessFile对象的文件指针遵循下面的规律: (1)新建对象的指针位于文件的开头 (2)每次读写操作之后,文件指针都相应后移读写的字节数 (3)利用getFilePointer可以获取当前文件指针以文件头为基准偏移的字节数 (4)利用see
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024中外合资企业教育培训与经营合同书
- 2024广州市房地产中介服务合同(卖方出租方使用)
- 2024个人民间借款合同范例
- 2024年信息安全保密协议
- 2024年合伙人分伙协议书
- 2024果树苗木定购合同范本
- 跨境电商商品销售合同
- 承包商土地使用权赠与合同模板
- 精装修室内工程合同
- 2024英文合同范本
- 病句的辨析与修改(解析版)-2025年中考语文复习专练
- 艾滋病反歧视培训
- 民政局离婚协议书范文模板标准版
- 标准吞咽功能评定量表
- (正式版)SHT 3533-2024 石油化工给水排水管道工程施工及验收规范
- 三年级上册数学课件-4.5.笔算三位数除以一位数(首位不能整除)-苏教版 (共16张PPT)
- 胃癌临床路径(2021年版)
- 人教中职数学球PPT学习教案
- 水文地质勘查招标文件范本
- 抽动秽语综合征量表(TSGS)
- 世界顶尖流化床品牌Glatt实验室流化床
评论
0/150
提交评论