前言:该总结涉及到利用Java I/O流创建文件,以不同的形式读写文件、操作文件。
一.理解Java的IO流
(1)什么是“抽象”?
是在头脑中抽出各种事物与现象的共同特征和属性,舍弃个别特征和属性的过程,在计算机科学总指高级的模型和低级的实体相对。(摘自维基百科)
(2)所以,流就是个抽象的概念,是对输入输出设备的抽象,Java程序中,对于数据的输入/输出操作都是以“流”的方式进行。设备可以是文件,网络,内存等。
(3)流具有方向性
(4)输入流(InputStream/Reader)、输出流(OutputStream/Writer)
(5)IO流是干什么的呢?
操作(创建、读写文件等)输入输出设备(磁盘、打印机、网络等)上的文件
二.IO流分类
从不同的角度对流进行分类
1. 处理的数据单位不同,可分为:字符流,字节流
2.数据流方向不同,可分为:输入流,输出流
3.功能不同,可分为:节点流,处理流
注:是不是对节点流和处理流不理解呢?
节点流:可以从/向一个特定的IO设备(如磁盘、网络)读/写数据的流,成为节点流,节点流也被称为低级流(摘自疯狂Java讲义);理解下来就是直接对IO设备上的文件进行直接读写,直接操作文件
处理流:用于对一个已存在的流进行连接或封装,通过封装后的流来实现数据读/写功能。处理流也称为高级流。需要去了解装饰器设计模式
三.操作流程
在Java中IO操作也是有相应步骤的,以文件操作为例,主要的操作流程如下:
1.使用File类打开一个文件(类比人要打开电脑上的文件并编辑,就需要知道文件路径和文件名)
2.通过字节流或字符流的子类,指定输出、输入的位置(找到编写的位置)
3.进行读/写操作(我们开始编辑文件)
4.关闭输入/输出(编辑完了,我们将要关闭文件,回到电脑桌面)
*IO操作是资源操作,最后一定不要忘记关闭
四.按数据单位分类来学习(分别用代码实践学习)
字节流
字节流主要是操作byte类型数据,以byte数组为准,主要操作类就是OutputStream、InputStream
字节输出流:OutputStream
OutputStream是整个IO包中字节输出流的最大父类,此类的定义如下:
public abstract class OutputStream extends Object implements Closeable,Flushable
从以上的定义可以发现,此类是一个抽象类,如果想要使用此类的话,则首先必须通过子类实例化对象,那么如果现在要操作的是一个文件,则可以使用:FileOutputStream类。通过向上转型之后,可以为OutputStream实例化
Closeable表示可以关闭的操作,因为程序运行到最后肯定要关闭
Flushable:表示刷新,清空内存中的数据
FileOutputStream类的构造方法如下:
public FileOutputStream(File file)throws FileNotFoundException
(本段内容摘自博客园博主:一直在等)
写数据:
package IObyte;
import java.io.*;
public class test1 {
public static void main(String[] args) throws IOException {
// 对照流程看代码
// 1. 使用File类打开一个文件(需要知道文件路径和文件名,如果没有这个文件,自动创建)
// 2.File.separator可以理解为分隔符
File f = new File("F:/JavaWorkspce/IOtest/txt"+(String) File.separator+"test1.txt")