




已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章 Java程序的对外接口输出/输入对象,10.1 向Java程序传递参数 10.2 基本输入输出read()和print() 10.3 输入输出流与文件 10.4 文本文件的输入输出 10.5 文本字符流的I/O 10.6 bit(字节)流的I/O 10.7 具有缓冲区的输入输出 10.8 百里挑一如何选择合适的I/O类 10.9 小结 10.10 习题,10.1 向Java程序传递参数,10.1.1 Java主程序的入口main()方法 10.1.2 如何在Java程序运行时传递参数 10.1.3 没有传递参数时的情况,10.1.1 Java主程序的入口main()方法,Java程序中出现最多的就是对象,而对象要做事情就要靠调用它的方法。Java中的方法在被调用时是可以接收参数的,这同样也适用于Java的主程序入口main()方法。之前我们所有例子中的main()方法都是这样定义的: public static void main( String argv ) / Java程序入口主函数 ,10.1.2 如何在Java程序运行时传递参数,先来看下如何在运行Java程序时向它传递参数。其实这很简单,只要我们在运行程序时后面接着写上参数就可以啦。参数与Java的程序名,参数与参数之间都是以空格分隔的。如果一个参数当中包含空格的话,那就需要用双引号将它括起来,防止操作系统把它当作两个参数来对待。 在Java的程序中呢,传进来的所有参数都以字符串的形式依次保存main()方法的字符串数组参数当中。里面是一个个的字符串,字符串在数组中的顺序和运行Java程序时输入的顺序一致。我们可以像在普通方法当中使用传入的参数一样使用这个字符串数组中的内容。字符串数组与Java程序运行时输入的参数间对应关系可以用下图来表示。,10.1.3 没有传递参数时的情况,我们如果没有输入参数,会是什么结果呢? 在这样的情况下字符串数组argv仍然是有定义的,它并不是null。只是它的长度是0,也就是说这个数组里面没有任何元素。我们可以用前面的程序来检验一下,不输入任何参数,看看它输出什么结果。这件事留着读者自己去完成吧!,10.2 基本输入输出read()和print(),10.2.1 Java的输入System.in.read() 10.2.2 Java的输出System.out.print(),10.2.1 Java的输入System.in.read(),Java也提供给我们一个与输出相对应的输入方法,它就是: System.in.read() 它一共有3种参数类型,分别为: System.in.read() System.in.read(byte b) System.in.read(byte b, int off, int len) 图10.2较详细地描述了当用byte数组来读终端用户输入的信息时,Java程序是取到回车符结束的,所以在第一次读name时,已经将第一次键入的回车符取到程序中了。第二次取字符M时由于我们使用不带任何参数的read()方法,它只取当前一个字符,即M。取回之后终端后面输入的回车符还没有被取到,这就需要在下次读输入字符之前将这两个回车符取出,以妨它们影响后面的读操作。 图10.2,10.2.2 Java的输出System.out.print(),先来看看语法格式: System.out.print(); System.out.println(); System.out.write(); 这个输出的形式与前面讲的输入略有不同,多了两个方法print()和println()。这两个方法可谓是Java中最为神通广大的方法了,它们强大之处在于可以接收任何类型的变量作为参数,输出它们的信息。 现在再回过头来看看write()方法,它只有两种形式: write(byte buf, int off, int len); write(int b);,10.3 输入输出流与文件,10.3.1 Java中流的概念 10.3.2 Java中的文件类File,10.3.1 Java中流的概念,在这里我们不妨以一个简单的程序为例,来让大家从中认识下流的概念。假设我们的程序用来实现一个功能将输入的字符中所有的小写字母转换成大写。那么程序的实现将是下面图10.3所表示的这样一个过程: 首先是操作系统将用户由键盘输入的字母及回车转换为一个个的字符,也就是字符流。 Java中的输入与输出都是以“流”的形式来实现的。所以Java中的“流”可以按数据的走向分为:输入流与输出流。输入流就是接收用户信息,将得到的输入数据传送给Java程序的“流”;输出流则相反,它将Java程序执行后要输出的结果传递给操作系统,再由操作系统将它们以一定形式输出到指定位置(屏幕或是文件)。 图10.3 Java中的输入输出流,Java中对文件的操作同终端的输入输出一样,也是通过一组相应的对象来完成的。我们直接使用它们就能完成输入输出的任务。下面的图列出了除基本输入输出之外所有与流有关的类,以及它们之间的继承关系。,10.3.2 Java中的文件类File,先来认识下Java中将文件抽象出的类File类吧!Java中的File类是文件系统的抽象,它让我们能够以统一的方式来操作各种不同操作系统平台的文件。File类提供了文件创建,删除,获取并修改文件属性的方法。它们用来使我们得到与此文件相关的信息,在必要的时候可以修改这些信息。遗憾的是,File类并没有为我们提供对文件进行输入输出操作的方法,这要待到下一节中用其它的类来做到。,先来看看File类为我们提供了哪些方法吧,请看表:,10.4 文本文件的输入输出,10.4.1 使用FileReader对象读取数据 10.4.2 使用FileWriter对象写数据 10.4.3 文本文件输入输出实例,10.4.1 使用FileReader对象读取数据,程序从文件中读取数据,需要通过以下3步来完成: (1)创建相应的输入对象,使其连接到要进行读操作的文件。 (2)从文件中读取所需的数据内容。 (3)关闭读操作结束的文件。,在这一节中先来给大家介绍其中的一种,就是使用Java中的FileReader对象来达到目的。其它的放在后面再向大家介绍,我们一种一种的学习,这样会让大家更有条理地逐步学习Java的输入输出。 既然确定这里是用FileReader对象来从文本文件中读数据,下面自然就是向大家介绍Java中的FileReader类啦! 下表所示是FileReader类中的方法,10.4.2 使用FileWriter对象写数据,同从文件中读信息一样,在向文件输出文本内容时也需要分3步: (1)创建相应的输出文件对象,使其连接到要进行写入操作的文件。 (2)向文件中写入输出的数据内容。 (3)关闭写操作结束的文件。,下面来看看Java中写入文本文件的类FileWriter吧。这次我们给大家介绍的FileWriter类中的常用方法都总结在下面的下表中啦。,10.4.3 文本文件输入输出实例,在下面这个小程序中,我们通过对文件的输入输出来实现文本文件的复制功能。如果只是文件的复制,有点儿过于简单啦,在复制的过程中,我们还作了大小写的转换,将原文件中的字母全改成了大写。 原文件我们在程序中写的名字是_java.txt,当然了,有兴趣的同学可以改造下面的程序,将它改为复制的文件名由参数读入,那就可以使用一个程序来复制不同的文本文件了。这个工作留给同学们自己来完成吧。,10.5 文本字符流的I/O,10.5.1 使用Scanner对象读取数据 10.5.2 使用PrintWriter对象写数据 10.5.3 重定向与文本I/O实例,10.5.1 使用Scanner对象读取数据,曾经给大家提过从终端输入的内容都是以文本形式传递到我们的Java程序中的,这就给我们带来了一个问题:如果想从终端输入数字,当如何操作? Java为我们提供了具有这个功能的类Scanner类。,同前面介绍的输入方法不同的是,Scanner类中的方法还具有类型转换的功能。它能够将输入的字符串转换为它们对应的类型值,而且字符串的来源不必是输入的信息,也可以是程序中定义的字符串哦!通过Scanner类中的各种方法,我们可以轻松得到终端输入的各种类型值。先通过图来了解一下Scanner类的功能吧。图中已经给大家标出了Scanner类在Java类库中的位置java.util.Scanner。,10.5.2 使用PrintWriter对象写数据,Scanner对象是用来输入的,大家肯定也期许Java会提供具备类型转换功能的输出对象,它不但能够输出文本到屏幕,文件,还能够像println()方法那样将其它类型的变量转换为字符串的形式输出。Java并没有在这件事上令我们失望,PrintWriter类中就提供了具有这些功能的方法。 PrintWriter对象不但提供我们将其它类型变量值转换为字符串的功能,而且它还支持带格式的转换呢! PrintWriter类中的format()方法所使用的格式控制字符同String类中的format()方法所用的是完全相同的。,下面我们在下表中给大家列出了PrintWriter类当中常用的一些方法,大家先认识下它们都长什么样子:,10.5.3 重定向与文本I/O实例,现在就来给大家介绍下操作系统所提供的类似功能重定向。 不论Windows还是Linux系统,它们都具备I/O重定向的功能,而且它们的重定向语法格式是相同的。现在来给大家看看操作系统的重定向功能是如何使用的吧! 下面表10.6中给大家总结出了重定向所用的符号以及它们的语法格式和含义: 表10.6,10.6 bit(字节)流的I/O,10.6.1 以字节的形式文本输出 10.6.2 使用FileOutputStream和DataOutputStream对象写数据 10.6.3 使用FileInputStream和DataInputStream对象读数据,10.6.1 以字节的形式文本输出,前面介绍的文本I/O类都是以字符为基本I/O单位的,也就是一个Character(在Java中是16bit,即2字节)作为一个基本的读写单位。最小不会再小于这个单位,即所有的文本文件长度肯定是2字节的整数倍。而这次给大家介绍的这个PrintStream类则是以字节(8bit)为单位进行的。所以称之为以字节形式的文本输出。 既然也是一种文本的输出,它自然和前面介绍的PrintWriter类中的方法也是极为相似。下面表10.7列出了PrintStream类当中的常用方法。大家可以看到这和PrintWriter类中的方法几乎是完全一样哦!而且在输出的效果上,也是相同的呢。当然了,它和PrintWriter类还是有所区别的,主要是它以字节为基本的输出单位。,如表10.7所示是 PrintStream类中的方法 表10.7,10.6.2 使用FileOutputStream和DataOutputStream对象写数据,这一小节来给大家介绍真正的二进制输出的两个类FileOutputStream和DataOutputStream。 这一小节介绍的两个类的确是用来输出二进制到指定的文件当中哦。其中FileOutputStream类里面只是有几个简单的二进制输入方法,完成将以字节为单位的二进制数据直接写入到文件中去的工作。而DataOutputStream类中提供的方法功能较为全面,它能够以二进制形式将基本类型变量的值写入到指定文件中。,我们将Unicode编码以及前面3种字符输出方法的编码形式都列在了下图当中,里面最左边一列是字符对应的Unicode编码,右边的3列分别是各个输出方法往文件中写入的编码内容。,10.6.3 使用FileInputStream和DataInputStream对象读数据,文件只是起保存数据的作用,如果之后无法再读出里面的数据,保存也就变得毫无意义了。这一小节我们来学的内容就是从之前保存的二进制文件当中再将原来存放的数据读出来。对于前面介绍的文本信息,如果读与写的编码方式不同,会产生乱码的现象。二进制的数据与文本内容相同,如果写入与读出的数据类型不同,读出的数值就是错误的,自然也就没有任何实际意义。所以大家会发现二进制的读取方法是与写入的方法相对应的。 先来看一个比较简单的FileInputStream类吧,下表就是FileInputStream类中的方法,下面就一起来看下类DataInputStream中都有哪些方法吧!下表就是 DataInputStream类中的方法。,10.7 具有缓冲区的输入输出,10.7.1 为什么要有缓冲区 10.7.2 带缓冲区的输入类BufferedReader和BufferedInputStream 10.7.3 带缓冲区的输出类BufferedWriter和BufferedOutputStream,10.7.1 为什么要有缓冲区,这个缓冲区是指的Java程序中的缓冲区。并不代表前面所介绍的I/O都不存在任何形式的缓冲,而是指它们在Java程序中并没有缓冲区。图10.10所表示的是带缓冲区的I/O操作过程。在带缓冲区的I/O中,所有的I/O操作都是通过缓冲区来完成的,而且我们只能够在缓冲区中直接进行I/O。如果缓冲区中没有要读取的数据,则程序会自动从输入设备继续读取。同样,缓冲区中的输出数据累积到一定数量,程序会自动将它们输出到指定的文件或设备。 图10.10,10.7.2 带缓冲区的输入类BufferedReader和BufferedInputStream,由于大家之前已经见过很多个Java当中用作I/O的类了,这一小节以及下面一小节里我们分别给大家介绍两个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖南省十四校联考2026届化学高二第一学期期中经典试题含解析
- 北京市第101中学2026届化学高一第一学期期中考试试题含解析
- 2026届贵州省独山县第四中学化学高二上期中考试模拟试题含解析
- 企业内部数据泄露应对方案
- 计算机设备维修服务框架协议范本
- 新高考物理联考模拟试题汇编
- 《初中化学实验操作示范与化学方程式书写指导》
- 小学语文单元集体备课教学方案
- 2026届贵州省遵义第二教育集团化学高一上期中调研模拟试题含解析
- 初中语文现代文阅读理解真题汇编
- 超高层建筑机电安装施工技术控制要点
- 解剖学基础课程全册教案
- 2024年煤矿重大事故隐患判定标准解读与查找方法培训课件
- 优化企业集团关联交易对账管理的研究与探讨措施实践应用探讨
- 西安市城中村改造管理办法
- Unit8 Our Blue Planet 大单元整体教学设计 -2024-2025学年仁爱科普版英语七年级下册
- 脯氨酸在疾病中的作用-深度研究
- 餐饮业中的顾客满意度管理
- 夏季高温防暑知识宣传
- 2025年浙江杭州萧山技师学院招考聘用非事业编制教师14人高频重点提升(共500题)附带答案详解
- 2025成都市《劳动合同书》范本(含竞业限制条款)
评论
0/150
提交评论