二级java程序设计--文件

输入输出及文件操作
考点分析与学习目的:
1.明确流,文件的概念
2.掌握针对文件的操作
3.掌握面向对象编程中对流的操作
一.概述
java中的流类基本上分为两大类:字节流(二进制流)和字符流(双字节流)。
1.计算机中数据的I/O方向
2.java中标准输入/输出类
操作系统通常定义3个标准流,按照标准I/O模型,java提供了System.in,System.out,System.err。
3.java中包含的输入输出流类:java的io包中的类可以处理不同类型的流。
(1)java.io包中的接口
主要包括处理字节流的DataInput接口和DataOutput接口,处理对象流的有ObjectInput接口和ObjectOutput接口。
Serializable接口用于处理对象流。凡是用于输入输出的对象在传输前,都要实现这个接口。
(2)java.io包中的抽象类和处于过渡状态的基础类
主要包括:处理字节流的抽象类有InputStream和OutputStream,处理过滤流的类有FilterOutputStream和FilterInputStream等。
(3)java.io包中的字节输入流:都是抽象类InputStream的子类。
主要包括FileInputStream,ByteArrayInputStream

(4)java.io包中的字节输出流类都是抽象类OutputSream的子类。主要包括ByteArrayOutputStream和FileOutputStream。

(5)java.io包中的过滤字节输入,输出流。

(7)java.io包中的压缩文件输入,输出流。

(8)java.io包的字符输入流:都是Reader类的子类。

(9)java.io包中的字符输出流:都是Writer类的子类。


二.文件:File是java.io包中一个重要的非流类,File描述了文件本身的属性,目录作为文件对象处理,File类封装了对文件系统进行操作的功能。
1.File类提供的方法
1)对文件名提供的方法
(1)public String getName():得到一个不包含路径的文件名。
(2)public String getParent():得到文件上一级的目录名。
(3)public File getParentFile():得到父路径文件对象。
(4)public String getPath():返回文件路径名字符串,即路径文件名。
2)测试文件属性操作提供的方法
(1)public boolean isDirectory():若File代表一个目录,则返回true。
(2)public boolean isFile():测定是否是文件。
(3)public boolean isAbsolute():测定是否是绝对路径名。
(4)public boolean exists():测定文件是否存在。
3)为文件信息操作和工具提供的方法
(1)public boolean delete():删除当前文件并释放资源。
(2)public void deleteOnexit():执行完后删除文件。
(3)public long length():返回文件字节长度。
4)为目录操作提供的方法
(1)public boolean mkdir():创建目录。
(2)public boolean mkdirs():创建包含父目录的目录。
(3)public String[] list():返回当前目录下文件。
5)其他方法
public int hashCode():返回文件名的哈希码。

2.随机文件流
java中的RandomAccessFile类提供了随机访问文件的功能,同时实现了DataInput和DataOutput接口。
例:一个随机文件的建立:

RandomAccessFile in = new RandomAccessFile("1.dat","r");		//“r”表示只读文件
常用方法:
(1)public long length() throws IOException:求随机文件的字节长度常用方法。
(2)public void seek(long pos) throws IOException:随机文件记录的查找。
(3)public void close() throws IOException:随机文件资源的关闭。

3.压缩文件流
(1)检索压缩文件时,zip文件作为FileInputStream对象的构造方法参数,而FileInputStream对象又作为ZipInputStream方法参数出现。
(2)当阅读zip文件时,ZipInputStream对象又作为Scanner对象的构造方法参数出现。


三.字节流
1.字节输入流:所有的字节输入流都继承自InputStream类,首先要实现DataInput接口,字节数据流DataInputStream是一个已经实现该接口的类。
主要方法:
(1)public int read(byte[] b) throws IOException:从输入流中读取多个字节数组。
(2)public abstract int read() throws IOException:从输入流中读入一个字节,若输入流结束则返回-1。
(3)public int read(byte[] b,int off,int len) throws IOException:从输入流中读出最多len个字节,存入b数组,从off位置开始存入,返回实际读入字节数。若b为空,则抛出NullPointerException异常。
(4)public void close() throws IOException:关闭输入流,释放相关资源。
2.字节输出流:所有的字节输出流都继承自OutputStream类。字节输出流首先要实现DataOutput接口,字节数据流DataOutputStream是一个已经实现了该接口的类。
主要方法:
(1)public final void writeInt(int i):写4个字节长的二进制整数。
(2)public void write(int b) throws IOException:把b的低8位写入输出流。
(3)public void write(byte[] b,int off,int len):把字节数组b从off位置开始的len个字节写入输入流中。
(4)public void flush() throws IOException:清空输入流,将缓冲的全部字节写入输出流中。
3.内存的读写:在java.io中还提供了ByteArrayInputStream和ByteArrayOutputStream类,可直接访问内存。它们是抽象类InputStream和OutputStream的子类。
ByteArrayInputStream:可从字节数组中读取数据。
ByteArrayOutputStream:可向字节数组中写入数据。

四.字符流:在java.io包中,处理unicode的所有类都是从Reader和Writer两个抽象超类中衍生出来的。
1.字符输入流:FileReader是抽象类Reader的子类,用于从一个文本文件中读取unicode文本。
主要方法:
(1)public int read() throws IOException:从输入流中读取一个字符,返回一个整数值,若输入流结束,返回-1。
(2)public int read(char[] buf) throws IOException:从流中读取最多buf.length个字符,存入buf,返回实际读入的字符数。
(3)public abstract int read(char[] buf,int off,int len) throws IOException:从输入流中读入最多len个字符,存入buf的off起始位置,返回实际读入字符数。

2.字符输出流:各个类都是抽象类Writer的子类。
主要方法:
(1)public void write(int c) throws IOException:把整形值的二进制低16位写入输出流中。
(2)public void write(char[] buf) throws IOException:把数组buf[]写入输出流中。

五.对象流:对象的传送首先要将所传送的对象串行化--实现java.io.Serializable接口用于处理对象流。凡是用于输入输出的对象在传输前,都要实现这个接口。

六.过滤流:数据在传输的过程中对流的元素进行处理设置的类。分为字节过滤流和字符过滤流。

七.管道流:使用管道可以将多个线程互相连接起来,而不必担心线程的同步问题。优点是提供了安全的线程通信的方法。但是过分依赖管道时可能造成死锁。

八.不同流的速度比较
速度上:内存映射流的速度最快,其次是缓冲流(过滤流的一种),直接使用文件流速度较慢。

九.输入输出流和正则表达式
java.util.regex包以及java.net.URL类相结合可用于网络上的字符输入流的模式字符串搜索上。
1.Pattern类:static Pattern compile(String expression,int flag)方法用于将正则表达式字符串编译成模式对象来进行快速模式匹配。
2.Matcher类:java.util.regex包中另一个类是匹配器(Matcher)类。
(存有模式串模式的)模式对象用matcher(input)方法为匹配器对象赋值:

Matcher m = pattern.matcher(input);
这时的matcher对象就可以根据模式串模式对匹配串input进行判断,检索等操作了。
Matcher的方法:
(1)public boolean find():用于查找下一个模式匹配串。
(2)public int start():用于返回匹配串的一个起始索引整数值。
(3)public int end():用于匹配串的一个终止索引的整数值。
以上两方法的返回值用于java.lang.StringBuilder.substring(start,end)来匹配串的串值。
例子:运用正则表达式包java.util.regex及其所有类,求一个指定网站的所有链接地址。
StringBuilder input = new StringBuilder();
String pString = "<a\\s+href\\s * = \\s*(\"[^\"]*\"|[^\\s>])\\s * >";
Pattern p = Pattern.compile(pString,Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(input);	//匹配器对象赋值
while(m.find()){
	int start = m.start();
	int end = m.end();
	String m = input.substring(start,end);
	System.out.println(m);
}
程序将扫描该网址html文件中的URL链接语句的模式匹配串,最后打印出链接网址列表。
十.java I/O流的其他应用
1.对xml对象进行解析
2.对硬盘指定路径下文件按照关键字搜索
3.查询网络数据库
4.和Socket配合处理电子邮件



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值