java I/O系统
来源:互联网 发布:淘宝号被冻结 编辑:程序博客网 时间:2024/05/22 02:03
输入和输出
JavaI/O类分为输入和输出。Inputstream抽象类是表示字节输入流的所有类的超类,用于读取单个字节。Reader抽象类是表示字符输入流的所有类的超类,用于读取单个字符。Outputstream用于写单个字节,Write用于写单个字符。它们都有read()和write()基本方法。下图为I/O所有类树图。
Inputstream类型
Inputstream从不同数据源产生的输入类,这些数据源包括:
- 字节数组。
- String对象
- 文件
- “管道”
- 其他
下表1-1为Inputstream的直接子类,通过继承它满足不同需求,具体自己查看Java api。
Outputstream类型
Outputstream数据输出类,输出目标包括:
- 字节数组。
- String对象
- 文件
- “管道”
- 其他
下表1-2为Outputstream的直接子类,通过继承它满足不同需求,具体自己查看Java api。
装饰器
由于I/O需要不同功能的组合,装饰器模式可以满足这个需求。FilterInputStream和FilterOutputStream是用来提供装饰接口以控制特定输入流和输出流的两个基类。
FilterInputStream
下表1-3为FilterInputStream的直接子类,通过继承它满足不同需求,具体自己查看Java api。
FilterOutputStream
下表1-4为FilterOutputStream的直接子类,通过继承它满足不同需求,具体自己查看Java api。
Reader和Writer
Reader和Writer与Inputstream和Outputstream的区别是Reader和Writer是面向字符的并且提供兼容Unicode。InputstreamReader可以把Inputstream转换成Reader,OutputstreamReader可以把Outputstream转换成Reader。下图为它们及其子类之间对应关系:
RandomAcessFile
此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机访问文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。该文件指针可以通过 getFilePointer 方法读取,并通过 seek 方法设置。
通常,如果此类中的所有读取例程在读取所需数量的字节之前已到达文件末尾,则抛出 EOFException(是一种 IOException)。如果由于某些原因无法读取任何字节,而不是在读取所需数量的字节之前已到达文件末尾,则抛出 IOException,而不是 EOFException。需要特别指出的是,如果流已被关闭,则可能抛出 IOException。
| 字节| 字符|
| InputStream | Reader 适配器:InputstreamReader|
经典使用方式
缓冲输入文件
如果想要打开一个文件用于字符输入,为了提高速度,我们希望对那个文件进行缓冲,那么可以使用BufferedReader。
package S;import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;import java.util.Iterator;import java.util.LinkedList;public class BufferedReaderTest { public static LinkedList<String> read(String filepath) { LinkedList<String> lls = new LinkedList<String>(); try { BufferedReader in = new BufferedReader(new FileReader(filepath)); String s; while ((s = in.readLine()) != null) { lls.add(s + "\n"); } in.close(); } catch (IOException e) { e.printStackTrace(); } return lls; } public static void main(String[] args) { LinkedList<String> lls = read("E:\\infile.txt"); Iterator llsi = lls.descendingIterator(); while (llsi.hasNext()) { System.out.print(llsi.next()); } }}
基本文件输出
package S;import java.io.*;public class PrintWriterTest { public static void Writer() { try { BufferedReader in = new BufferedReader(new FileReader("E:\\infile.txt")); PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("E:\\outfile.txt"))); String s; while ((s = in.readLine()) != null) { out.println(s); } in.close(); out.close(); } catch (IOException e) { e.printStackTrace(); } } public static void mian(String[] args) { Writer(); }}
存储和恢复数据
DataOutputStream可以保证准确的读取数据-无论读和写平台是否相同。
package S;import java.io.*;public class StoringAndRecoveringData { public static void main(String[] args) { try { DataOutputStream out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("E:\\outfile.txt"))); out.writeDouble(3.124355); out.writeUTF("ni hao a linlin"); out.writeInt(1); out.writeUTF("ni hao a world"); out.close(); DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream("E:\\outfile.txt"))); System.out.println(in.readDouble()); System.out.println(in.readUTF()); System.out.println(in.readInt()); System.out.println(in.readUTF()); in.close(); } catch (IOException e) { e.printStackTrace(); } }}
随机读取
RandomAccessFile该类继承了DataInput, DataOutput也能保证准确的读取,除此之外还能指定位置读取,前提是读、取内容你已知。
package S;import java.io.IOException;import java.io.RandomAccessFile;public class RandomAccessFileTest{ public static void main(String[] args){ try { RandomAccessFile out=new RandomAccessFile("E:\\outfile.txt","rw"); out.writeDouble(3.124355); out.writeUTF("ni hao a linlin"); out.writeInt(1); out.writeUTF("ni hao a world"); out.close(); RandomAccessFile in=new RandomAccessFile("E:\\outfile.txt","r"); System.out.println(in.length()); in.seek(8); System.out.println(in.readUTF()); } catch (IOException e) { e.printStackTrace(); } }}
- Java I/O系统
- java I/O系统
- Java I/O系统
- Java I/O系统
- Java I/O系统
- java I/O系统
- Java I/O系统
- Java I/O系统
- JAVA I/O 系统
- Java I/O系统
- JAVA I/O系统
- java I/O系统
- JAVA : I/O系统
- Java I/O系统
- JAVA I/O系统
- Java I/O系统
- java I/O系统
- Java I/O系统----------- 标准I/O
- mui开发的App--解决安卓机键盘弹出,底部导航栏上升的问题(一种方法)
- linux获取精准进程PID之pgrep命令
- Listen第二个参数的意义
- 测试环境部署环境安装篇jdk ,jmeter,tomcat,mysql
- JAVA8新特性
- java I/O系统
- 获奖公布 | 征文——从高考到程序员
- Duilib设置字体类型大小等属性
- Keras —— 功能API入门
- ElasticSearch5.4搭建
- 【html-css】杂记
- Oracle SQL语句执行过程
- java集合之Map家族
- JavaMelody应用监控