java_IO

java_IO

IO概念

数据存储在内存中,只是临时存储,再次运行程序数据会丢失,不能持久化。

持久化:把数据从内存中往其他存储设备存储的过程。

流:内存与存储设备之间传输数据的通道、管道。

IO的分类

按方向:(以JVM虚拟机为参照物)【重点】

​ 输入流: 将< < 存储设备> > 中的内容读入到< < 内存> > 中。

​ 输出流: 将< < 内存> > 中的内容写入到< < 存储设备> > 中。

按单位

​ 字节流:以字节为单位,可以操作所有类型的文件。

​ 字符流:以字符为单位,只能操作文本类型的文件。

文本类型的文件:可以用记事本打开的文件。例如:以 .java /.c/ .txt/ .html结尾的都是文本文件;而 以 .class /.mp3 /.mp4都不是文本文件。

按功能

​ 节点流:具有基本的读写功能。

​ 过滤流:在节点流的基础上,增加新的功能。

字节流(以字节为单位,可以操作所有类型的文件

字节流的父类( ( 抽象类) ) :


•  InputStream:字节输入流
    public int read(){}
    public int read(byte[] b){}
    public int read(byte[] b,int off,int len){}
---------------------------------------------------------
•  OutputStream:字节输出流
    public void write(int n){}
    public void write(byte[] b){}
    public void write(byte[] b,int off,int len){}

### 节点流(具有基本的读写功能)

• FileOutputStream:文件字节输出

FileOutputStream fos=new FileOutputStream(“E:/CoreJava /a.txt”);
/*绝对路径:盘符:/文件夹名/文件名 或是 盘符 :\\文件夹名\\文件名
创建文件字节输出流时,如果指定的文件不存在,则系统会自动创建一个 文件,但是文件夹必须提前创建.*/
----------------------------------------------------------
FileOutputStream 继承OutputStream 中的方法:
public void write(int n);//将单个字节写入到文件中

•  FileInputStream:文件字节输入流
----------------------------------------------------------
FileInputStream fos =new FileInputStream(“file/a.txt”);
/*参数:代表要读取哪一个文件中的内容,如果指定的文件不存在,则系统不会自动创建,而是抛出异常:java.io.FileNotFoundException:file\a.txt(系统找不到指定的文件)*/

常用方法


//将一组字节写入到文件中
public void write(byte[] b);
--------------------------------------------------------
//将字节数组的部分内容一次性的写入到文件中(从下标 off 开始,写入的字节个数为len)
public void write(byte[] b,int off,int len);
---------------------------------------------------------
//一次只读一个字节的内容,返回值代表读取到的字节内容,如果达到文件的尾部,则返回-1
public int read();
--------------------------------------------------------
//一次性读取多个字节的内容,并把读到的内容存储在字节数组b中,返回值代表实际读取到的字节数,如果达到文件的尾部,则返回 -1 
public int read(byte[] b);
--------------------------------------------------------
//一次性读取多个字节的内容,并把读到的内容存储在字节数组b中(从off开始存储,读取的字节长度为len),返回值代表实际读取到的字节数,如果达到文件的尾部,则返回-1 
public int read(byte[] b,int off,int len);

过滤流(在节点流的基础上,增加新的功能)

• 增强了缓冲区功能;
• 增强了读写8种基本数据类型和字符串功能;
• 增强了读写对象的功能:

readObject();  //从流中读取一个对象、
writeObject(Object obj);  //向流中写入一个对象

缓冲流

BufferedOutputStream/BufferedInputStream

​ 缓冲流,提高 IO 效率,减少访问磁盘的次数;

​ 数据存储在缓冲区中,flush是将缓存区的内容写入文件中,也可以直接close.

数据流

DataOutputStream/DataInputStream

除了基本的读写操作,还可以操作8种基本数据类型:

• WriteByte(int n) / readByte()
• writeShort(int n) / readShort()
• writeInt(int n) / readInt() 
• writeLong(long n) / readLong()
• writeFloat(float f) / readFloat() 
• writeDouble(double d) / readDouble()

可以操作String数据:

writeUTF(String str)/readUTF()

对象流

ObjectOutputStream/ObjectInputStream

readObject();  
//从流中读取一个对象(循环读取对象,当读到文档结尾时抛出EOFException异常)
writeObject(Object obj);  //向流中写入一个对象

对象放在流上进行传输的过程称为对象序列化

对象序列化时必须保证对象是可序列化的,必须保证这个类实现java.io.Serializable。

transient修饰的属性,不参与序列化

• 如果对象的属性,是自定义类型的对象时,则该对象也必须是可序列化的;
• 如果对集合对象序列化,必须保证该集合中的所有元素时可序列化的

编码

编码 备注
ISO8859-1 西欧
GBK 简体中文
BG2312 简体中文
GB18030 简体中文
BIG5 繁体中文- - 台湾
UTF-8 万国码

字符流

• 字符流的父类(抽象类):

• Reader :字符输入流

public int read(){}
public int read(char[] c){}
public int read(char[] b,int off,int len){}

• Writer: 字符输出流

public void write(int n){}
public void write(String str){}
public void write(char[] c){}

FileWriter

•  FileWriter文件字符输出流,继承Writer中的方法:
•  public void write(int n);//将单个字符写入到文件中public void write(String str);//一次性写入多个字符
---------------------------------------------------------
•  FileReader 文件字符输入流 继承Reader 中的方法:
•  public int read();//一次读取一个字符的内容
---------------------------------------------------------
//一次性读取多个字符的内容,将读取到的内容存储在char类型的数组中,返回值代表实际读取的字符个数,达到文件的尾部返回-1public int read(char[] c);
---------------------------------------------------------
//一次性读取多个字符的内容,将读取到的内容存储在char 类型的数组中,存储的起始下标为off, 读取的字符个数为len,返回值代表实际读取的字符个数,达到文件的尾部返回-1 public int read(char[] c,int off,int len)

字符过滤流

BufferedReader/PrintWriter缓冲流

public String readLine():
//一次读取一个文本行的内容,达到文件尾部时,返回null。
public void println(String str):
//写入字符串后自动换行

InputStreamReader/OutputStreamWriter桥转换流

桥转换的作用:将字节流转换为字符流,转换的桥梁,同时可以设置字符的编码方式。

步骤总结:
• 创建字节节点流
• 创建桥转换流,同时设置编解码方式
• 包装过滤流,方便读写操作
• 读/写操作
• 关闭流:只需要关闭最外层流。

File类

• IO 流:对文件中的内容进行操作。
• File 类:对文件自身进行操作,例如:删除文件,文件重新命名等。

public boolean createNewFile();
//创建文件,创建成功返回true ,如果文件存在返回值为 false。public boolean mkdir();
//创建文件夹,创建成功返回true,如果文件存在返回值为 false 。public boolean delete();
/*删除文件夹/文件,删除成功返回 true,否则为false。
    •  当删除文件夹时,只有当文件夹为空时,才可以删除;
    •  而删除文件时,不管文件内容是否为空,都会被删除。*/public boolean renameTo(File f);
//更改文件的名字,更改成功返回true,否则为 false 

File类常用方法

public boolean setReadOnly();
//设置文件为只读public String getName();
//获取文件名(含扩展名)、文件夹名。public boolean exists();
//判断一个文件或是目录是否存在,存在返回true,否则为 false 。
•  public String getAbsolutePath();
//获得绝对路径。public File[] listFiles();
//获取当前文件下所有的文件、文件夹。public boolean isFile();
//判断 File 对象所对应的是否为文件,而不是目录。public boolean isDirectory();
//判断 File 对象所对应的是否为目录,而不是文件。

猜你喜欢

转载自blog.csdn.net/qq_38928944/article/details/79763910