[零基础学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,如需转载请自行联系原作者

相关文章
|
16天前
|
移动开发 Java Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
【4月更文挑战第3天】在移动开发领域,性能优化一直是开发者关注的焦点。随着Kotlin的兴起,其在Android开发中的地位逐渐上升,但关于其与Java在性能方面的对比,尚无明确共识。本文通过深入分析并结合实际测试数据,探讨了Kotlin与Java在Android平台上的性能表现,揭示了在不同场景下两者的差异及其对应用性能的潜在影响,为开发者在选择编程语言时提供参考依据。
|
17天前
|
缓存 算法 Java
Java内存管理与调优:释放应用潜能的关键
【4月更文挑战第2天】Java内存管理关乎性能与稳定性。理解JVM内存结构,如堆和栈,是优化基础。内存泄漏是常见问题,需谨慎管理对象生命周期,并使用工具如VisualVM检测。有效字符串处理、选择合适数据结构和算法能提升效率。垃圾回收自动回收内存,但策略调整影响性能,如选择不同类型的垃圾回收器。其他优化包括调整堆大小、使用对象池和缓存。掌握这些技巧,开发者能优化应用,提升系统性能。
|
16天前
|
Java
深入理解Java并发编程:线程池的应用与优化
【4月更文挑战第3天】 在Java并发编程中,线程池是一种重要的资源管理工具,它能有效地控制和管理线程的数量,提高系统性能。本文将深入探讨Java线程池的工作原理、应用场景以及优化策略,帮助读者更好地理解和应用线程池。
|
23天前
|
Java 编译器 Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
在开发高性能的Android应用时,选择合适的编程语言至关重要。近年来,Kotlin因其简洁性和功能性受到开发者的青睐,但其性能是否与传统的Java相比有所不足?本文通过对比分析Kotlin与Java在Android平台上的运行效率,揭示二者在编译速度、运行时性能及资源消耗方面的具体差异,并探讨在实际项目中如何做出最佳选择。
17 4
|
24天前
|
数据采集 分布式计算 大数据
Java语言在大数据处理中的应用
传统的大数据处理往往依赖于庞大的数据中心和高性能的服务器,然而随着大数据时代的到来,Java作为一种强大的编程语言正在被广泛应用于大数据处理领域。本文将探讨Java语言在大数据处理中的优势和应用,以及其在分布式计算、数据处理和系统集成等方面的重要作用。
|
1天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
1天前
|
设计模式 算法 Java
Java中的设计模式及其应用
【4月更文挑战第18天】本文介绍了Java设计模式的重要性及分类,包括创建型、结构型和行为型模式。创建型模式如单例、工厂方法用于对象创建;结构型模式如适配器、组合关注对象组合;行为型模式如策略、观察者关注对象交互。文中还举例说明了单例模式在配置管理器中的应用,工厂方法在图形编辑器中的使用,以及策略模式在电商折扣计算中的实践。设计模式能提升代码可读性、可维护性和可扩展性,是Java开发者的必备知识。
|
1天前
|
安全 Java API
函数式编程在Java中的应用
【4月更文挑战第18天】本文介绍了函数式编程的核心概念,包括不可变性、纯函数、高阶函数和函数组合,并展示了Java 8如何通过Lambda表达式、Stream API、Optional类和函数式接口支持函数式编程。通过实际应用案例,阐述了函数式编程在集合处理、并发编程和错误处理中的应用。结论指出,函数式编程能提升Java代码的质量和可维护性,随着Java语言的演进,函数式特性将更加丰富。
|
2天前
|
Java API 数据库
深入解析:使用JPA进行Java对象关系映射的实践与应用
【4月更文挑战第17天】Java Persistence API (JPA) 是Java EE中的ORM规范,简化数据库操作,让开发者以面向对象方式处理数据,提高效率和代码可读性。它定义了Java对象与数据库表的映射,通过@Entity等注解标记实体类,如User类映射到users表。JPA提供持久化上下文和EntityManager,管理对象生命周期,支持Criteria API和JPQL进行数据库查询。同时,JPA包含事务管理功能,保证数据一致性。使用JPA能降低开发复杂性,但需根据项目需求灵活应用,结合框架如Spring Data JPA,进一步提升开发便捷性。
|
7天前
|
Java
探秘jstack:解决Java应用线程问题的利器
探秘jstack:解决Java应用线程问题的利器
15 1
探秘jstack:解决Java应用线程问题的利器