[零基础学JAVA]Java SE应用部分-28.Java IO操作(02)

简介:
上季内容回顾:
File类 
RandomAccessFile类
 ---> 文件读、写操作
本季主要知识点:
1、字节流:InputStream、OutputStream 
2、字符流:Reader、Writer
字节流和字符流
image
InputStream和OutputStream
image
为什么现在非要用子类去实例化InputStream和OutputStream呢?
查JDK文档
image 
先完成向文件中写入数据: 
OutputStream定义: 
public abstract class OutputStream
extends  Object
implements  Closeable Flushable
OutputStream是一个抽象类,如果是抽象类,则肯定要用其子类进行对象的实例化。
如果要向文件中保存,则要使用FileOutputStream。
就用这两个类完成向文件中写入一个字符串的目的。
FileOutputStream构造方法: 
· public FileOutputStream(File file) throws FileNotFoundException:以File类的对象创建文件输出流 
· public FileOutputStream(File file,boolean append) throws FileNotFoundException:以File类的对象创建文件输出流,在最后的append参数表示的是是否在文件后面追加内容,默认是追加的。 
· public FileOutputStream(String name) throws FileNotFoundException:直接写入文件的路径,进行输出操作,实际上里面就自动包含了一个File类的对象,自动进行实例化 
· public FileOutputStream(String name, boolean append) throws FileNotFoundException
向输出流中写入内容: 
public void write(byte[] b) throws IOException 
现在要写入的内容是一个字符串,但是write方法接收的只能是一个byte数组,必须把字符串变为字符数组才可以。
image
image
以上的程序为字节的输出流,因为最终结果都是把字符串变为了byte数组了。 
追加的时候就直接在后面写上一个控制的标记,内容为true: out = new FileOutputStream(f,true) ;
image
看下效果:
image
现在我们灵活点哈~由外部输入
image
image
能否通过程序把在文件中的内容读进来呢? 
InputStream --> 字节肯定是byte数组 
文件中的内容都是字节
InputStream中的方法: 
把byte数组变为字符串就直接找String的构造方法。
image
image
看下效果:因开辟byte[1024]空间,当读完文件中内容后剩余空间读不到数据就报错输出"?"符号。
image  
下面解决读取报错问题哈~
image
看下效果,现在出错的问号没有了,都换成空格了哈~
image
下面我们想办法将空格去掉哈~定义一个计数,计算到底一共读了多少位
image
看下效果:
image
如果直接使用InputStream类中的read()方法读取,则必须一个一个读,当文件读到底(read的返回值为-1时就表示文件读到底),则退出循环,之后用String把byte数组变为字符串输出。
使用另外一个read方法,传入一个byte数组,之后由类自动把内容赋给byte数组。
image
看下修改后的效果是否一样哈~
image
在字节流的操作中,可以发现一切都必须以byte数组为标准。
字符流:直接支持字符的操作 
Reader、Writer
使用Writer向文件中写入内容:
image
看下效果有没写入数据哈~
image
与之前的OutputStream在使用上是非常相似的,只是现在可以直接操作字符串了。
Reader的使用:
image
image
关于OutputStream与Writer及InputStream与Reader到底有那些区别呢? 
· 字节流是没有使用到缓冲区的,是直接操作文件的 
· 字符流是使用到了缓冲区,所有的内容要先放在缓冲区中,之后才能向文件中写入。
OutputStream
image
看下效果:文件流最后没有关闭,内容也依然可以输出
image
现在把程序换成字符流,又会如何?
image
发现如果不关闭,则内容是无法输出的,因为内容全部都在缓冲区中,之前是因为调用了close()方法,所以会自动把缓冲区给清空掉。
image
可以直接使用强制性的把缓冲内容输出的操作完成。 
public abstract void flush() throws IOException
image
看下效果:
image
证明字节流不使用缓冲区,字符流使用到缓冲区~~~
总结
练习题(下季讲解哈~~~)
image
掌握四个类的基本操作: 
InputStream、OutputStream、Reader、Writer,分别的四个文件的操作子类:FileXxx之类。

############################################










本文转自redking51CTO博客,原文链接:http://blog.51cto.com/redking/133113,如需转载请自行联系原作者

相关文章
|
5月前
|
监控 Java API
现代 Java IO 高性能实践从原理到落地的高效实现路径与实战指南
本文深入解析现代Java高性能IO实践,涵盖异步非阻塞IO、操作系统优化、大文件处理、响应式网络编程与数据库访问,结合Netty、Reactor等技术落地高并发应用,助力构建高效可扩展的IO系统。
153 0
|
2月前
|
Java Unix Go
【Java】(8)Stream流、文件File相关操作,IO的含义与运用
Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。!但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。
183 1
|
4月前
|
Java 测试技术 API
Java IO流(二):文件操作与NIO入门
本文详解Java NIO与传统IO的区别与优势,涵盖Path、Files类、Channel、Buffer、Selector等核心概念,深入讲解文件操作、目录遍历、NIO实战及性能优化技巧,适合处理大文件与高并发场景,助力高效IO编程与面试准备。
|
4月前
|
SQL Java 数据库连接
Java IO流(一):字节流与字符流基础
本文全面解析Java IO流,涵盖字节流、字符流及其使用场景,帮助开发者理解IO流分类与用途,掌握文件读写、编码转换、异常处理等核心技术,通过实战案例提升IO编程能力。
|
5月前
|
存储 Java Linux
操作系统层面视角下 Java IO 的演进路径及核心技术变革解析
本文从操作系统层面深入解析Java IO的演进历程,涵盖BIO、NIO、多路复用器及Netty等核心技术。分析各阶段IO模型的原理、优缺点及系统调用机制,探讨Java如何通过底层优化提升并发性能与数据处理效率,全面呈现IO技术的变革路径与发展趋势。
115 2
|
9月前
|
存储 网络协议 安全
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
358 23
|
监控 并行计算 数据处理
构建高效Python应用:并发与异步编程的实战秘籍,IO与CPU密集型任务一网打尽!
在Python编程的征途中,面对日益增长的性能需求,如何构建高效的应用成为了每位开发者必须面对的课题。并发与异步编程作为提升程序性能的两大法宝,在处理IO密集型与CPU密集型任务时展现出了巨大的潜力。今天,我们将深入探讨这些技术的最佳实践,助你打造高效Python应用。
213 0
|
Java
Java 中 IO 流的分类详解
【10月更文挑战第10天】不同类型的 IO 流具有不同的特点和适用场景,我们可以根据具体的需求选择合适的流来进行数据的输入和输出操作。在实际应用中,还可以通过组合使用多种流来实现更复杂的功能。
402 57
|
10月前
|
缓存 网络协议 Java
JAVA网络IO之NIO/BIO
本文介绍了Java网络编程的基础与历史演进,重点阐述了IO和Socket的概念。Java的IO分为设备和接口两部分,通过流、字节、字符等方式实现与外部的交互。
303 0
|
Java
java 中 IO 流
Java中的IO流是用于处理输入输出操作的机制,主要包括字节流和字符流两大类。字节流以8位字节为单位处理数据,如FileInputStream和FileOutputStream;字符流以16位Unicode字符为单位,如FileReader和FileWriter。这些流提供了读写文件、网络传输等基本功能。
227 10