java I/O和反射机制

使用I/O操作文件

1.1操作文件或目录属性
在计算机中,通常使用各种各样的文件来保存数据,如何在java程序中操作这些文件呢?
java.io包提供了一些接口和类,对文件进行基本的操作,包括对文件和目录属性的操作、对文件读写的操作等。
File对象既可表示目录,在程序中一个File对象可以代表一个文件或目录。利用它可用来对文件或目录进行基本操作。它可以查出与文件相关的信息,如名称、最后修改日期、文件大小等。
使用File类操作文件和目录属性的步骤一般如下。
(1)引入File类。
import java .io.File;
(2)构造一个文件对象。
File file =new File(“text.txt”);
(3)利用File类的方法访问文件或目录的属性,具体使用如下。
file.exits(); //判断文件或目录是否存在
file.isFile(); //判断是否是文件
file.isDirectory(); //判断是否是目录
file.getName();//获取文件或目录的名称
file.getPath(); //获取文件或目录的路径
file.getAbsolutePath(); //获取文件或目录的绝对路径
file.lastModified(); //获取文件或目录的最后修改日期
file.length(); //获取文件或目录的大小,单位为字节
1.2认识java的流
流是指一连串流动的字符,是以先进先出的方式发送和接受数据的通道。
流分为输入流和输出流,输入/输出是相对于计算机内存来说的,如果数据输入到内存,则成为输入流,如果从内存中输出则称为输出流。java的输出流主要由OutputStream和Write作为基类,而输入流则主要由InputStream和Reader作为基类。
在java包中,封装了许多输入/输出流的API。在过程中,这些输入/输出流类的对象称为流对象。可以通过这些流对象将内存中的数据以流的方式写入文件,也可以通过流对象将文件中的数据以流的方式读取到内存。
构造流对象时往往会和数据源(如文件)联系起来。数据源分为源数据源和目标数据源。输入流关联的时源数据源。
输入/输出流又分为字节流和字符流两种形式。字节流时8位通用字节流,其基本单位是字节。字节流的基类是InputStream类和OutputStream类,它们是抽象类。
字符流是16位Unicode字符流,基本单位是Unicode字符。字符流最适合用来处理字符串和文本,因为它们支持国际上大多数的字符集和语言。字符流的基类是reader类和Writer类,它们也是抽象类。
一个被访问的流的基本特征都是通过实现这4个抽象类的方法来建立的。
InputStream类的常用子类有FileInputStream,用于从文件中读取数据。
OutputStream类的常用子类位FileOutStream,用于向文件写数据。
Reader类的常用子类为BufferedReader,接受Reader对象作为参数,并对其添加字符缓冲器。
Writer类的常用子类为BufferedWriter,用于将数据缓冲到字符输出流。
1.3读写文本文件
1.使用字节流读写文本文件
(1)使用字节流类FileInputStream读文本文件
FileInputStream称为文件输入流,它是字节输入流InputStream抽象类的一个子类,他的作用是将文件中的数据输入到内部储存器(简称内存)中,可以利用他来读取文本文件中的数据。
使用FileInputStream类读文件数据时应注意以下几个方面。
(1)read()方法返回整数,如果读取的是字符串,需进行强制类型转换。
(2)流对象使用完毕后需要关闭。
1.4读写二进制文件
1.使用字节流读二进制文件
利用DataInputStream类读二进制文件,其实与利用FileInputStream类读文本文件极其相似,也要用到FileInputStream类关联二进制文件。
(1)引入相关的类。
(2)构造一个数据输入流对象。
(3)利用数据输入流类的方法读取二进制文件中的数据。
(4)关闭数据输入流。
2.使用字节流写二进制文件
利用DataInputStream类写二进制文件,其实与利用FileOutputStream类写文本文件极其相似,也要用到FileOutputStream类管来奶二进制文件。
(1)引入相关的类。
(2)构造一个数据输入流对象。
(3)利用数据输入流类的方法读取二进制文件中的数据。
(4)关闭数据输入流。
3.1.5重定向标准I/O
System.in流与System.out流:从键盘接受数据以及向屏幕输出数据。
System.in常见方法:
int.read()
int.read(byte []buf)
System.out常见方法:
print(),
println().
3.1
认识序列化
在开发中,经常需要用到将对象的信息保存到磁盘中便于以后检索。可以使用任务1学习的方法逐一对对象的属性信息进行操作,但是这样通常很繁琐,而且容易出错。可以想象一下编写包含大量对象的大型业务应用程序的情形,程序员不得不为每一个对象编写代码,以便将字段和属性保存至磁盘以及从磁盘还原这些字段和属性。序列化提供了轻松实现这个目标的快捷方法。
使用序列化的意义在于将java对象序列化后,可以将其转换为字节序列,这些字节序列可以被保存在电脑上,也可以借助网络进行传输,同时序列化后的对象保存的是二进制状态,这样实现了平台无关性,即可以将在Windows操作系统中实现序列化的一个对象,传输到UNIX操作系统的机器上,再通过反序列化后得到相同对象,而无需担心数据因平台问题显示异常。
3…2
序列化机制允许将实现了序列化的java对象转换为字节序列,这个过程需要借助与i/o流来实现:
(1)创建一个对象输出流(ObjectOutputStream),它可以包装一个其他类型的输出流,如文件输出流FilOutputStream。
(2)通过对象输出流的writeObject()方法写对象,也就是输出可序列化对象。
3.3认识反射
1.反射机制
java的反射机制是java的特性之一,反射机制是构建框架技术的基础所在。
java反射机制是指在运行状态中,动态获取信息以及动态调用对现象方法的功能。
java反射有三个动态性质。
运行时生成对象实例。
运行期间调用方法。
运行时更改属性。
3.3反射的应用
1.获取类的信息
(1)获取Class对象。
1.调用对象的getClass()方法2.调用类的class属性3.使用Class类的forName()静态方法
(2)从Class对象获取信息
1.访问Class对应的类包含的构造方法2.访问Class对应的类所包含的方法3.访问Class对应的类所包含的属性4.访问Class对应的类所包含的注解5.访问Class对应的类的其他信息
2.创建对象
通过反射来创建对象有如下两种方式
使用Class对象的newInstance()方法创建对象
使用Constructor对象创建对象
3.访问类的属性
使用Field对象可以获取对象的属性。通过Fild对象可以堆属性进行取值或赋值操作。
4.访问类的方法
使用Method对象可以调用对象的方法。在Method类中包含一个invoke()方法。
5.使用Array类动态创建和访问数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值