JAVA2核心技术卷I:基础知识(原书第7版) -- 第12章. 流与文件

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主AI工具!学习进阶更高效! 阅读详情

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核心技术Ⅰ(原书12)》第十二章并发 Java核心技术Ⅰ(原书12)》第十二章并发个人笔记,记录了较为其中较为常用的API和知识点 阅读详情

相关推荐

C++体系文件操作

通过本学习,应理解I/O体系的概念,掌握的输入/输出控制格式。了解C++有关文件的概念及文件的使用方法,理解文件体系结构,掌握实现文件操作的成员函数的使用方法,学会文本文件的打开、读/写、关闭等操作的编程方法。

java基础知识复习笔记

最近在学习echo3源码时忽然发现自己对java的很多基础知识还是没有掌握,很多语法从前根本就没想过还可以这么用的!比如echo3对内部、内部接口、静态构造、对象组合等出神入化的应用,直叫人叹为观止呀。有感于自己基础之薄弱,重新拾起《java核心技术一》一书,复习一下一些重要语法知识及某些以前不太在意的基础语法。特作如下笔记。 一、接口 1、主要用来描述具有什么功能,而并不给出这些功能的具...

hlxiong的专栏 126

作业12-文件

作业12-文件 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多文件相关内容。 2. 面向系统综合设计-图书馆管理系统或购物车 使用文件改造你的图书馆管理系统或购物车。 2.1 简述如何使用文件改造你的系统。文件中数据的格式如何? 把用户信息、图书信息保存在文件中 数据格式:书名 书的数量 2.2 简述系统中文件读写部分使用了文件相关的什么接口?为什...

weixin_30938149的博客 119

Java中的IO,入门

在保存数据时,可以选择二进制格式或文本格式。 例如:整数1234存储成二进制数时,它被写为由字节 00 00 04 D2构成的序列,(十六进制表示法),而存储成文本格式,它被存为了字符串“1234”。 虽然,二进制格式的 I/O 告诉且高效,但是不宜人来阅读! 关于文本格式的 I/O ,我们需要考虑 字符编码(character encoding),UTF-16编码方式,字符串“123

酒足饭饱勾二嫂,天真无邪假三叔 566

《C++语言程序设计(第4)学生用书》课程学习(12)——第12 异常处理

qq_34573534的博客 200

2025/03/23 ​《Java核心技术·I(原书第11)》Java核心技术·II(原书第11):高级特性》凯·S.霍斯特曼(Cay S. Horstmann)书籍阅读

2025/03/23 ​《Java核心技术·I(原书第11)》Java核心技术·II(原书第11):高级特性》凯·S.霍斯特曼(Cay S. Horstmann)书籍阅读

weixin_45428910的博客 1522

Java核心技术·I(原书12

他是《Java核心技术》两本的作者,也是《重要的,第二(Addison-Wesley,2018)的Core Java SE 9和《重要的,第二(Addison-Wesley,2017)的作者。读者应在充分理解Java语言和Java库的基础上,灵活应用Java提供的高级特性,包括面向对象编程、反射和代理、接口和内部异常处理、泛型编程、集合框架、事件监听器模型、图形用户界面设计和并发。☉第四介绍了面向对象的两大基石——封装的重要概念,以及Java语言实现封装的机制——和方法;

jascl的博客 1万+

Java核心技术 I 基础知识原书第10)》:Java编程的必备宝典

Java核心技术 I 基础知识原书第10)》:Java编程的必备宝典 【下载地址】Java核心技术原书第10中文下载 Java核心技术原书第10中文下载 项目地址: https://gitcode.com/open...

gitblog_09750的博客 763

Java编程的终极导航:《Java核心技术》系列全面解读

在编程世界中,Java的位置无可替代,无论是企业级应用、移动应用开发,还是大数据处理,Java都扮演着重要的角色。对于刚刚踏入这个领域的新手来说,有一条清晰的路线图是非常必要的;而对于经验丰富的开发者而言,及时更新知识库、了解新技术同样重要。这时,`《Java核心技术 I:开发基础(原书12)》``《Java核心技术 II:高级特性(原书12)》`便是你的灯塔,为你的Java学习之旅指引方向

hacker707的博客 2万+

Java核心技术Ⅱ(原书12)》第一

Java核心技术Ⅱ(原书12)》第一重点内容,高效的式处理是每个Java程序员都该会的技能,本文介绍了《Core Java》中的相关知识。

Wwhds的博客 1893

【社区图书馆】读《Java核心技术 I》有感

近期二刷了《Java核心技术 I》,于是写个二刷读后感分享给入门Java的小伙伴,辅助学习。

**My Coding Family** 1028

Java核心技术(原书第10) Ⅰ》阅读心得总结

放假前打算花利用假期时间阅读一下《Java核心技术 Ⅰ》(以下简称“Ⅰ”),终于花了一个月的时间粗细兼并地读完了这本书。今天抽点儿时间写个博客,总结一下阅读成果好了。 这本书给人最大的感受是知识讲得很专业,比本科教材内容充实几倍,豆瓣目前评分7.6,褒贬不一。先说说缺点吧,个人认为阅读体验并不是很好。主要体现在: 基础知识部分介绍很详细,几乎无死角,内容跟得上时代,但正因为这样,有些地方实在难以理解; 各节间耦合性较低,知识没有问题,但逻辑安排似乎有点儿问题,不懂作者为何这样安排...

wenjingyu的专栏 851

JAVA简单小爬虫 & 《JAVA2核心技术1:基本知识(原书7)》源代码

简单爬虫 这段代码源自《JAVA2核心技术1:基本知识(原书7)》例12-10: import java.io.*; import java.net.*; import java.util.regex.*; public class HrefMatch { public } ...

一出好剧 193

Java核心技术(原书第10) Ⅰ》个人心得总结

2019.3.20《 Java核心技术1)》 总结 《 Java核心技术1)》 总结 拖了这么久,终于来了。我发现在学习上很多时候我真是拖延患者。一给自己安排的任务重,学习效率低下,二是计划总赶不上变化。 大概花了有2,3个月的时间吧,从1月份到3.5号,完整地看完了这本书,中间断断续续。整体看完后的几个感受吧。 基础知识讲得很细,很全面,但这样也导致了不太容易阅读,也会比较枯燥。所以我...

qq_38689900的博客 1057

【亲测免费】 Java核心技术 I + II(第9)(中文带目录) 下载仓库

Java核心技术 I + II(第9)(中文带目录) 下载仓库 【下载地址】Java核心技术III第9中文带目录下载仓库 Java核心技术 I + II(第9)(中文带目录) 下载仓库 项目地址: https:/...

gitblog_09719的博客 683

Java核心技术 I 基础知识原书第10

Java核心技术 I 基础知识原书第10) 三、Java的基本程序设计结构(一) Java的基本程序设计结构主要介绍程序设计的基本概念(如数据型、分支以及循环)在Java中的实现方式。 一个简单的Java应用程序 public class FirstSample { public static void main(String[] args) { Syste...

weixin_46245747的博客 3611

【亲测免费】 Java核心技术原书第10中文下载

Java核心技术原书第10中文下载 【下载地址】Java核心技术原书第10中文下载 Java核心技术原书第10中文下载 项目地址: https://gitcode.com/open-source-toolkit/4a4...

gitblog_09712的博客 730

读《JAVA 核心技术I 基础知识原书第10

程序员写的技术 FAQ 和杂文 1560

Java核心技术 Ⅱ 高级特性(原书第10)》一导读

前  言 致读者本书是按照Java SE 8完全更新后的《Java核心技术 Ⅱ 高级特性(原书第10)》。Ⅰ主要介绍了Java语言的一些关键特性;而本主要介绍编程人员进行专业软件开发时需要了解的高级主题。因此,本书Ⅰ和之前的本一样,我们仍将本书定位于用Java技术进行实际项目开发的编程人员。编写任何一本书籍都难免会有一些错误或不准确的地方...

weixin_34358092的博客 1523
上一篇: JAVA2核心技术卷I:基础知识(原书第7版) -- 第11章. 异常与调试
下一篇: JAVA2核心技术卷I:基础知识(原书第7版) -- 第13章. 泛型程序设计
overkill
博客等级 码龄24年 1粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值