黑马程序员——java复习总结——其他类和IO流

来源:互联网 发布:java面试葵花宝典2015 编辑:程序博客网 时间:2024/05/19 09:14

------- android培训、java培训、期待与您交流! ----------


一.其他对象

 

1.1      System类

System类中的方法和属性都是静态的。

典型的方法便是:

Sytem.out:标准输出,它可以将输出语句打印在控制台上。

System.in:标准输入,它可以读取从键盘上输入的字符。

 

1.2      Runtime类

 

将java程序与其运行环境相连接,无构造函数,由该类的静态方法提供对象。由这个方法可以看出该类使用了单例设计模式。

Runtime可以获取进程名,启动或者杀死进程。

 

1.3      Date类

Data是一个日期类,它对日期和时间进行了描述。通过new Data对象可以获取Data的实例,输出就是日期,可以通过格式化打印出自定义格式的日期。

 

SimpleDateFormat:可以将日期的模式封装到对象中,再将时间转成该模式。

格式:

SimpleDateFormat s = new SimpleDateFormat(“yyyy年MM月dd日”);

这样就可以将模式封装到对象中

s.format(d);就可以将制定对象模式化。

 

1.4      Calendar类

 

Calendar是一个日历类。他没有构造函数,可以通过getInstance()方法获取该对象。

通过获取了对象后,调用该对象的方法,就可以获取日历信息。

常用的日期方法:

get(Calendar.YEAR):获取日历中的年,返回的是当前年的信息。

get(Calendar.MONTH):获取日历中的月。从0开始,最大数值是11.

get(Calendar.DAY_OF_MONTH):获取日历中的日,是按照当前月来排布的。

get(Calendar.DAY_OF_WEEK):获取日历中的日,是按照当前是星期来排布的。以星期日开始。

除了get方法,该类还可以自己设置日历:

set(YEAR,MONTH,DAY);该方法可以设置指定对象的年月日。

add(calendar.Year,num):该方法可以将制定对象的年增加num。同样的方法还有增加月,增加日。

 

1.5      Math类

 

该类包含用于执行基本数学的运算方法,如初等数学,对数,平方根和三角函数。

math类没有构造函数,它的常用方法大多数是静态方法:

ceil:返回大于制定数值的最小整数。

floor:返回小于制定数值的最大整数。

round:四舍五入。

pow(a,b):返回a的b次方。

random:返回带正号,包括0,但不包括1的随机数,它内部是使用伪随机算法算出的。当然,它还可以指定格式,如下:

Random r = new Random();

int I = r.nextInt(10);

他就是获取一个0到9内的随机整数。

 

二、IO流

 

2.1 IO流的概念

IO是Input和Output的缩写,IO流用来处理设备之间的数据传输,java对数据的操作是通过流的方式,而java操作数据流的对象都在IO包中,IO流按照数据分为两种:字节流和字符流。而按照流向则分为输入流和输出流。

 

2.2 IO流常用的基类

字节流的抽象基类:

InputStream,OutputStream

字符流的抽象基类:

Reader,Writer

由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。如:

InputStream的子类File InputStream。

Reader的子类FileReader。

 

2.3  flush和close的区别

对于IO流中,flush和close都可以刷新流对象。只是对于这两个方法,close会将流对象刷新完之后关闭该流,该流就会不再可用,而flush仅仅是刷新流对象,刷新完后该流依然可用。

 

2.4 IO流的具体子类

 

2.4.1 字符流

字符流的典型特点是可以通过字符流来操作文件对象,它主要用于操作文本文件。字符流用于最常用操作文本文件的对象便是FileReader和FileWriter两个子类,如下,就是通过这两个子类,对一个文本文件进行的复制操作:

在上述例子中,包含了IO流中的异常处理方式,在IO流中,不管是否会出现异常,必须要进行的操作是关流,所以关流操作就显得格外重要,必须在finally中进行操作。

 

注意:在对字符输出流进行文件对象引用时,如果该文件不存在,则会建立一个新的文件,用于存储。如果该文件存在,也会建立一个新的文件而覆盖原有的文件,如果想要不覆盖原有的文件,则需要在参数后面加一个boolean型变量即可,用true表示不覆盖,具体格式如下:

FileWriter(“1.txt”,true)。

 

2.5  字符流缓冲区

为了提高读写效率,优化程序性能java程序中封装了两个字符流对象,分别用于读写,对应类为:

BufferedWriter字符流写入流缓冲区,用于写入数据。

BufferedReader:字符读取流缓冲区,用于读取数据。

 

缓冲区中封装了更多读写的方法,用法如下:


可以看出,使用缓冲区,可以通过缓冲区的读取一行的方法,更快的读写文件,缓冲区还封装有换行,刷新等功能。

其实readLine方法的原理:也是在硬盘上一个一个的读取,而读取的方法则是read方法,只是缓冲区将字符数组封装在了内部,所以不需要再在外部创建数组了。

 

了解了readLine原理后,可以自己模拟一个字符串缓冲区,代码如下:


如上代码就是对缓冲区的模拟

 

对于Reader类,BufferedReader类就是一个用来装饰Reader的类,这种类叫装饰类,这种模式叫做装饰设计模式。

当想要对已有的对象运行功能增强时,可以定义类,将已有的对象传入,基于已有的功能,并加强其功能,那么自定义的该类称为装饰类。

 

2.6  字节流

 

因为字符流只能对文本文件进行操作,所以在操作非文本文件时,就需要其他的流对象了,这就是字节流。

 

通过字节流,可以复制图片,音频等非文本文件,如下,就是一个通过字节流复制图片的例子:

 

2.7  键盘录入,转换流

System.in和System.out是标准输出输入流设备,他们使用的流都是字节流,而一般情况键盘录入的都是字符,所以这时若想用字符流的方法操作字节流,就需要使用转换流。

InputStreamReader和OutputStreamWrtiter就是两个转换流。

 

如下,就是应用键盘录入的例子:

 

IO流的总结规律:

1、  明确源和目的

源:输入流。InputStream,Reader

目的:输出流。OutpurStream,Writer。

 

2、  操作的数据是否是纯文本:

是:字符流。

不是:字节流

 

3、  当体系明确后,在明确要使用哪个具体对象:

通过设备来进行区分:

源设备:内存,硬盘,键盘

目的设备:内存,硬盘,控制台


0 0
原创粉丝点击