IO流学习总结

1.IO的概念

  IO操作就是指使用JAVA进行输入和输出的操作,JAVA所有的IO操作都是基于数据流进行的,这些数据流代表了字符或者字节数据的流动顺序。JAVA中提供了读写数据的标准方法。JAVA中任何数据源的对象都会提供数据流方法。Java.io包中包含了大多数输入输出类。

2.数据流的概念

  假设我们在桌面上新建了一个文件,现在要用Java向其中写入一段数据,这段数据来源于另一个文件。可以将这两个文件想象为两个装水的桶A和B,现在要用水管将A桶中的水转移到B桶中,流就是水管中的水流,数据——即水,就会通过这个水管从A桶流向B桶。而B可以选择每次接受的水量,可以是1g,也可以是1kg。但是由于水已经在管道中排好顺序,所以B不能选择接受水的顺序,只能按顺序每次接受一定量的水。
  当程序需要读取数据时,就会开启一条通往数据源的数据流管道,同样,当程序需要写入数据的时候,就会开启一条通往目的地的数据流管道。数据流就会通过管道在内存中往返。
  概括起来就是:
    数据流:一组有序,有起点和终点的数据序列。包括输入流和输出流。
      输入流:程序从输入流读取数据。
      输出流:程序向输出流发送数据。
  数据流分为字节流和字符流。

3.标准输入输出流

  在java.lang.System类中,有三个常量:

public final static InputStream in = null;
public final static PrintStream out = null;
public final static PrintStream err = null;

1)标准输出流System.out

向输出设备输出数据

2)标准输入流System.in

从键盘获得数据

3)标准错误流System.err

输出错误提示(通常输出语句标红)

4.java.io包中的重要类和接口

  五个类:File、OutputStream、InputStream、Writer、Reader;
  一个接口:Serializable;
  在io包中主要包含以下三个部分:
    1.流式部分:IO主体部分
    2.非流式部分:主要包含一些辅助流式部分的类
    3.其他类:文件读取部分的与安全相关的类

5.File类

  包含了文件或者目录的一些操作方法,比如:生成新目录,修改文件名,删除文件,判断文件所在路径等;

public class File implements Serializable, Comparable<File>{
}

  构造方法
  1.File(String pathname)
    作用:通过给定的路径名来创建File对象,若字符串为空,结果是空的路径名
    例如:File f1 = new File(“c:\test\test.txt”);(注:多一个“\”是因为“\t”是转义字符)
  2.File(String parent,String child)
    作用:通过传入的父子路径名创建新的File对象,如果parent是null则创建新的File实例,等价于构造方法1。
    例如:File f2 = new File(“c:\test”,“test.txt”);
  3.File(File parent,String child)
    作用:通过传入的父子路径名创建新的File对象,如果parent是null则创建新的File实例,等价于构造方法1。
    例如:File parent = new File(“c:\test”);
       File f3 = new File(parent,“text.txt”);
  常用方法
  1.boolean createNewFile():创建文件(文件路径和文件名在构造方法中已给出)
  2.boolean mkdir():创建文件夹
  3.boolean delete():删除文件或文件夹
  4.String getName():返回路径中表示的文件或文件夹名
  5.String getPath():返回路径名
  6.long length():返回文件字节数
  7.String getAbsolutePath()
   File getAbsoluteFile():获取绝对路径
  8.String getParent()
   File getParebtFile():获取父路径
  9.boolean exists():判断路径是否存在
  10.boolean isDirectory():判断路径是不是文件夹
  11.boolean isFile():判断是否是文件
  12.String[] list()
   File[] listFiles():遍历文件夹
  例如:

package test;
import java.io.File;
import java.io.IOException;
public class test {
	public static void main(String[] args) throws Exception {
		File f1 = new File("D:\\text");
		File f2 = new File(f1,"text.txt");
		f1.mkdir();
		f2.createNewFile();
		String fileName = f2.getName();
		String pathName = f2.getPath();
		long length = f2.length();
		System.out.println("文件名为"+fileName);
		System.out.println("路径为"+pathName);
		System.out.println("文件字节大小为"+length);
		f2.delete();
		f1.delete();
	}
}

输出为:

文件名为text.txt
路径为D:\text\text.txt
文件字节大小为0

6.流式部分类

在这里插入图片描述

1)IO基类(InputStream/Reader、OutputStream/Writer)

输入流InputStream和Reader

常用方法:
  abstract int read():从输入流读取下一个字节/字符并返回,无字节/字符可读取则返回-1
    重载方法:read(byte[] b/char[] b):读取b.length长度的字节/字符到缓冲区b,返回读取的字节/字符长度,无字节/字符可读取则返回-1
         read(byte[] b/char[] b,int off,int len):读取len长度的字节/字符并从b[off]开始储存,返回读取的字节/字符长度,无字节/字符可读取则返回-1

输出流OutputStream和Writer

常用方法:
    void write():将指定的字节/字符输出到输出流中,其中c即可以代表字节,也可以代表字符。
      重载方法:write(byte[] b/char[] b):将字节数组/字符数组中的数据输出到指定输出流中。
           write(byte[] b/char[] b,int off,int len):将字节数组/字符数组中从off位置开始,长度为len的字节/字符输出到输出流中
           
Writer中还包含两个方法:
  void write(String str); 将str字符串里包含的字符输出到指定输出流中。
  void write (String str, int off, int len); 将str字符串里面从off位置开始,长度为len的字符输出到指定输出流中。

2)IO文件流(FileInputStream/FileReader、FileOutputStream/FileWriter)

InputStream和Reader都是抽象类,本身不能创建对象,但他们分别有一个用于读取文件的输入流:FileInputStream和FileReader,他们都是节点流,会直接和文件关联。

FileInputStream

构造方法:FileInputStream(File file)
     FileInputStream(String name)
     创建实例对象并与指定文件关联

FileReader

构造方法:FileReader(File file)
     FileReader(String name)
     创建实例对象并与指定文件关联
FileOutputStream和FileWriter相似

3)IO缓冲流(BufferedInputStream/BufferedReader, BufferedOutputStream/BufferedWriter)

缓冲流概述:
  缓冲流是对文件流处理的一种流,其本身并不具备IO功能,只是加上缓冲提高了效率。当处理文件时,缓冲力会先将数据放到内存中缓存起来,当积累一定数量时,再将数据一次性写入或读取出来。在IO操作时加上缓冲流能提高效率。
  因为缓冲流实现了缓冲功能,所以在使用完后,要记得调用flush或close方法,取出缓冲区中的数据,否则可能无法写出数据。
构造方法:
  Class (父类 cl):创建默认缓冲区大小的对象并保存参数
  Class(父类 cl,int size):创建指定缓冲区大小的对象并保存参数

4)IO转换流(InputStreamReader/OutputStreamWriter)

InputStreamReader:
  字节流通向字符流的桥梁,用指定的编码表读取字节并将其解码为字符。
OutputStreamWriter:
  字符流向字节流的桥梁,用指定的编码表将要写入流中的字符解码为字节。

构造方法:
  InputStreamReader(InputStream in) :创建一个使用默认字符集的InputStreamReader。
  InputStreamReader(InputStream in, Charset cs) :创建一个使用给定字符集的InputStreamReader。
  OutputStreamWriter(OutputStream out) :创建一个使用默认字符编码的OutputStreamWriter。
  OutputStreamWriter(OutputStream out, Charset cs) :创建一个使用给定字符集的OutputStreamWriter。

两个子类:FileReader/FileWriter
子类与父类的区别:
  父类能使用指定的编码表进行解码,而子类只能使用系统默认的编码表进行解码。

5)IO对象流(ObjectInputStream/ObjectOutputStream)

对象的读写,对对象进行序列化和反序列化。
  要求:
  1.类必须实现Serializable接口;
  2.静态不能被序列化;
  3.不需要序列化的字段前加transient。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值