`

备份 - 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源码:联系人导出 ContactList.zip

    2. **IO流** - 在Java中,导出联系人信息可能涉及到文件的读写操作,这需要使用到IO流(Input/Output Stream)。例如,使用FileWriter、BufferedWriter来创建文本文件,或者使用ObjectOutputStream来序列化对象并...

    疯狂Java实战演义

    《疯狂Java实战演义》是一本深度探讨Java编程技术的实战书籍,虽然提及缺少第五章的内容,但从其他章节的标题可以看出这本书涵盖了广泛的Java应用领域。以下是各章节的主要知识点概述: 1. **第7章 - 单机连连看** ...

    Vert.x for Java 开发者

    ### Vert.x for Java 开发者知识点详解 #### 一、简介 **Vert.x** 是一个高性能的异步框架,专为现代多核硬件设计。它适用于构建轻量级、响应迅速且可扩展的应用程序。本指南旨在帮助Java开发者了解如何使用Eclipse...

    java网盘项目源代码

    【Java网盘项目源代码】是一个基于Java技术实现的在线存储服务系统,它允许用户上传、下载、管理和分享文件。这个项目的核心目标是提供一个安全、便捷的云存储解决方案,让用户能够通过网络访问他们的个人数据,类似...

    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章 存储...

    2021-2022计算机二级等级考试试题及答案No.14430.docx

    - **应用场景**:文件上传广泛应用于文件共享、备份等场景。 ### 26. ResultSet对象的作用 - **知识点概述**:在Java中,ResultSet对象用于存储数据库查询的结果集。 - **详细解释**:通过执行SQL查询语句,可以将...

    2021-2022计算机二级等级考试试题及答案No.11905.docx

    - 晶体管作为电子器件标志着计算机技术的重大进步,因此晶体管计算机属于第二代计算机。 ### 25. Java 中的 DatagramSocket 类 - **知识点概述**:`DatagramSocket` 类用于实现 UDP(用户数据报协议)通信。 - *...

    2021-2022计算机二级等级考试试题及答案No.16838.docx

    7. JFileChooser类:JFileChooser是Java Swing包中的一个类,用于实现文件选择对话框,用户可以通过它获取文件名、文件路径,但不能直接获取文件内容或文件对象。 8. 方法重写:在Java中,只有当子类继承父类时,...

    大数据技术Hadoop笔试题.doc.docx

    Hadoop大数据技术是当前互联网行业中处理海量数据的关键工具,由Apache软件基金会开发,其核心组件包括HDFS(Hadoop Distributed File System)和MapReduce。Hadoop的设计理念是高容错性和低成本,能够适应廉价硬件...

    2021-2022计算机二级等级考试试题及答案No.3801.docx

    2. 数组初始化:在C/C++等语言中,声明一个整型数组inta[3][4]={0},会将第一元素a[0][0]初始化为0,其余元素未指定初始值,所以默认为不确定的值。 3. 输入设备:键盘、扫描仪、光笔是常见的输入设备,用于向...

    tomcat日志详细说明

    Tomcat在每次启动时都会自动生成一系列的日志文件,这些日志文件主要存放在Tomcat安装目录下的`logs`文件夹内,并且会按照日期进行归档备份。以下是几种常见的日志类型: 1. **catalina.日期.log**:这是Tomcat最...

    2021-2022计算机二级等级考试试题及答案No.3530.docx

    根据给定文件的信息,我们可以总结出以下相关的IT知识点: ### 1. 构造方法的访问权限 - **知识点概述**:构造方法是类的一种特殊成员,它在创建对象时被调用。构造方法用于初始化对象的状态。在Java中,构造方法...

    数据库系统概念(第五版)实践题练习题答案

    2. **12-web.pdf**:这部分内容可能涉及Web数据库应用,如如何利用数据库技术支持动态网页,可能涵盖HTTP协议、SQL与PHP/Java等后端语言的交互,以及如何设计和实现基于Web的数据库应用程序。 3. **6-web.pdf**:此...

    2021-2022计算机二级等级考试试题及答案No.19430.docx

    ### 计算机二级等级考试知识点解析 #### 1. JSP页面间的请求转发 - **知识点**: 在JSP中,`forward`动作用于将请求转发给其他JSP页面。 - **解析**: `forward` 动作允许当前页面将控制权转移到另一个JSP页面上,但...

    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...

    Hadoop面试100题.pdf

    虽然Ganglia本身主要关注于监控功能,但它可以与第三方工具结合使用来实现告警功能。 2. **BlockSize是不可以修改的** - **知识点说明**:HDFS中的BlockSize是可以根据需要进行调整的。用户可以通过修改Hadoop配置...

Global site tag (gtag.js) - Google Analytics