`

备份 - JAVA2核心技术卷I -- 第12章. 流与文件

阅读更多

1. 读写操作

InputStream/OutputStream: 输入输出流,以字节为单位

Reader/Writer: 读写以双字节为单位

2. InputStream和OutputStream方法

2.1 int read(): 读取一个字节的数据并返回,读到流的结尾,返回-1

2.2 int read(byte[] b): 将数据读到一个字节数组中并返回读取的字节数目,到达末尾返回-1

2.3 int read(byte[] b, int off, int len): 读取的数据放在b的第off开始,len代表长度

2.4 int available(): 返回可用的未阻塞的字节数

int byteAvailable = in.available();

if (byteAvailable > 0) {

byte[] data = new byte[byteAvailable];

in.read(data);

}

2.5 void close(): 关闭输入流

2.6 void write(int n): 写入一个字节的数据

2.7 void write(byte[] b): 写入数组b的所有字节

2.8 void write(byte[] b, int off, int len): 写入数组b某一范围的数据

2.9 void close(): 刷新并关闭输出流

2.10 void flush(): 刷新输出流

3. JDK5.0加入4种新接口: Closeable、Flushable、Readable、Appendable

4. 介绍基本流的使用

4.1 FileInputStream和FileOutputStream能够和磁盘文件联系起来

FileInputStream fin = new FileInputStream("Employee.dat"); // 在当前目录下寻找文件

在windows格式的路径,应该使用“\\”作为路径分隔符

4.2 同样可以使用以下方法读取

File f = new File("employee.dat");

FileInputStream fin = new FileInputStream(f);

byte[] b = (byte) fin.read();

System.getProperty("user.dir"): 可以获取当前目录的属性

4.3 缓冲读取数据

DataInputStream din = new DataInputStream(new BufferedInputStream(newFileInputStream("employee.dat")));

一般使用DataInputStream来帮助读取ZipInputStream和FileInputStream中的数据

5. DataInput和DataOutput

5.1 readBoolean()、readByte()、String readLine(): 读取一行由\n \r \r\n或者EOF结尾的字符、String readUTF()

6. RandomAccessFile: 随机存取文件流能够在文件的任何位置查找或者写入数据

RandomAccessFile("employee.dat", "r/rw/rws"): 后面是读取模式

getFilePointer(): 获取指针位置

7. 文本流

使用编码读取文件 InputStreamReader in = new InputStreamReader(new FileInputStream("abc.dat"), "ISO8859_5");

String abc = new String(byte[] b); 方便把byte转换成String

8. 字符集Charset

Charset cset = Charset.forName("ISO-6659-1");

8.1 编码

String str = "abc";

ByteBuffer buffer = cset.encode(str);

byte[] bytes = buffer.array();

8.2 解码

byte[] bytes = "...";

ByteBuffer buffer = ByteBuffer.wrap(bytes); //返回给定的字节数组

CharBuffer cbuf = cset.decode(buffer);

String str = cbuf.toString();

9. 文本输出 - PrintWriter

PrintWriter: 文本格式写数据 DataOutputStream: 二进制格式写数据

PrintWriter = out new PrintWriter(new FileWriter("employee.dat")); 或者

PrintWriter = out new PrintWriter(new FileOutputStream("employee.dat"));

PrintWriter = out new PrintWriter(new FileWriter("employee.dat"), true); //自动刷新模式

10. 文本输入 - BufferedReader

BufferedReader in = new BufferedReader(new FileReader("Employee.txt"));

11. ZIP文件流

ZipInputStream zin = new ZipInputStream(new FileInputStream(zipname));

ZipEntry entry;

while ((entry = zin.getNextEntry()) != null) {

analyze entry;

read the contents of zin;

zin.closeEntry();

}

zin.close();

12. 分隔符 - StringTokenizer

用于读取字符串中的被分割后的字符

StringTokenizer tokenizer = new StringTokenizer(line, "|"); //字符串line用“|”被分割

while (tokenizer.hasMoreTokens()) {

String token = tokenizer.nextToken();

process token;

}

13. StringBuilder和StringBuffer

StringBuffer允许多线程进行操作,StringBuilder一个线程操作

append(String str/ char c): 追加字符串或者代码单元

insert(int offset, String str): 在offset位置插入一个字符串

delete(int startIndex, int endIndex): 删除从startIndex到endIndex-1的内容

toString(): 返回一个String

14. 对象序列化读写

读取的对象必须实现Serializable接口 class Employee implements Serializable

14.1 写入对象

ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("employee.dat"));

Employee harry = new Employee("Harry", 50000, 1989, 10, 1);

out.writeObject(harry);

14.2 读取对象

ObjectInputStream in = new ObjectInputStream(new FileInputStream("employee.dat"));

Employee e = (Employee) in.readObject();

15. ByteArrayOutputStream 存储数据到一个字节数组

ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(baos, "UTF-8");

... //osw.writeObject(this);

byte[] reqBuffer = baos.toByteArray();

16. 文件管理

File f = new File("text.txt"); // 创建一个文件,使用test.txt

boolean delete(): 删除文件

boolean exists(): 文件是否存在

String getAbsolutePath(): 得到绝对路径

String getName(): 得到文件名

boolean isDirectory(): 是否为目录

boolean isFile(): 是否为文件

String[] list(): 列出目录下所有文件名

分享到:
评论

相关推荐

    Java优化编程(第2版)

    第12章 java多线程技术与应用性能优化 12.1 java多线程技术 12.1.1 进程与线程 12.1.2 线程的生命周期 12.2 并行任务与性能 12.2.1 并行任务与多线程 12.2.2 并行任务与死锁 12.3 线程池技术与应用性能优化 12.3.1 ...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    第一条语句说明了对象 today 属于 Date 类,第二条语句说明了对象 myRectangle 属于 Rectangle 类。对象说明并没有体现一个具体的对象,只有通过实例化后的对 象才能被使用。 2. 实例化对象 实例化对象就是创建一个...

    整理后java开发全套达内学习笔记(含练习)

    Generic [java] 泛型 [dʒi'nerik] goto (保留字) 跳转 heap n.堆 [hi:p] implements (关键字) 实现 ['implimәnt] import (关键字) 引入(进口,输入) Info n.信息 (information [,infә'meiʃәn] ) ...

    网管教程 从入门到精通软件篇.txt

    JAR:Java档案文件(一种用于applet和相关文件的压缩文件) JAVA:Java源文件 JAR:Java档案文件(一种用于applet和相关文件的压缩文件) JAVA:Java源文件 JFF,JFIF,JIF:JPEG文件 JPE,JPEG,JPG:JPEG图形...

    informix 实用大全

    第12章 处理事务与锁 12.1 事务与日志描述 12.2 日志与非日志数据库 12.3 并发性与锁 12.4 informix如何处理事务 12.5 特殊情形 12.6 结论 12.7 更多信息 12.8 informix与其他参考资料 第13章 存储...

    Linux环境数据库管理员指南

    9.23.2 基于主机的访问控制 273 9.23.3 验证方法 274 9.23.4 建立用户 275 9.23.5 建立组 275 9.23.6 访问控制 275 9.23.7 函数和规则 275 9.23.8 函数 275 9.23.9 规则 276 9.23.10 说明 276 9.23.11 安全的TCP/IP...

    2009.6.19—30举办3S研讨会暨Google Earth与Google Map等仿真建模与共享及ARCGIS与遥感高级程序员培训班

    关于举办2009’CHINA3S’3S技术一体化应用研讨会暨遥感与GIS制图、Google Earth与Google Map等虚拟三维仿真建模与共享软件应用开发及ARCGIS与遥感分析操作应用高级程序员学习班的最新通知 (2009.6.19—30) Google...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    第二章 用户和权限 一、 用户介绍 ORACLE用户是学习ORACLE数据库中的基础知识,下面就介绍下类系统常用的默认ORACLE用户: 1. sys用户:超级用户,完全是个SYSDBA(管理数据库的人)。拥有dba,sysdba,sysoper等角色或...

    Mac OS X Snow Leopard 10A432雪豹 BT种子

    Core Image 是一项核心的Mac OS X中的新技术,利用机器的绘图处理器来作影像相关特效。 Quartz Extreme 使用OpenGL的把他们表示为三维内容中的材质贴图来更快速地绘制屏幕上的显示内容。允许利用显卡的3D硬体加速...

    史上最好传智播客就业班.net培训教程60G 不下会后悔

    大型互联网开发技术:代码生成、网页静态化、基于JQuery的Web2.0页面开发、AJAX、SEO、网站调优、采集器、RSS/XML、网站防黑(防XSS攻击、防注入漏洞攻击、防CC攻击、防挂马、防盗链、敏感词过滤、广告帖智能过滤)...

Global site tag (gtag.js) - Google Analytics