IO流知识总结

Io流

File类

相对路径:相较于某个路径下,指明的路径

绝对路径:包含盘符在内的文件或文件目录的路径

路径的分隔符和系统有关:

​ windows和Dos系统默认使用“ \ "表示

​ Unix和URL使用” / “表示

创建File的方法

File(String, int)
File(String, File)
File(String)
File(String, String)
File(File, String)
File(URL)

IO流

用于处理设备之间的数据传输

输入:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存中)

输出:将程序(内存)数据输出到磁盘、光盘等存储文件

抽象基流 字节流 字符流
输入流 InputStream Reader
输出流 OutputStream Writer
抽象基流 节点流(文件流) 缓冲流(处理流的一种)
InputStream FileInputStream BufferedInputStream(read (byte[] buffer))
OutputStream FileOutputStream BufferedOutputStream(write (byte[] buffer, 0, len))/flush()
Reader FileReader BufferedReader(read (char[] cbuffer)/readline())
Writer FileWriter BufferedWriter(write (char[] cbuffer, 0, len))/flush()
FileReader

read()返回读入的一个字符,如文件到达末尾则返回-1。

异常处理:为了保证流资源一定可以关闭,需要try-catch-finally。

读入的文件一定要存在,否则会有FIleNotFoundException

FileWriter

输出操作,对应的File可以不存在,并不会报异常,

​ 如果不存在,在输出过程中,会自动创建文件;

​ 如果文件存在使用的时FileWriter(File, false)/FileWriter(File)会对原有文件覆盖,如果使用的是FileWriter(File, true),不

​ 会对原有文件覆盖而是追加

不能用字符流处理图片,要用字节流。

​ 对于文本文件,使用字符流处理(.txt、.java、.c、.cpp …)

​ 对于非文本文件,使用字节流处理(.jpg、.mp3、.mp4、.avi、.doc、.ppt …)

处理流

缓冲流

BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter

作用:提高流的读取、写入的速度

关闭外层流的同时,内层流也会自动关闭,因此内层流的关闭可以省略

处理流就是”套接“在已有流的基础上

public class fileStudy {
    
    
    public static void main(String[] args) {
    
    
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
    
    
            File file = new File("E:\\holiday\\java\\io\\a.txt");
            bis = new BufferedInputStream(new FileInputStream(file));
            bos = new BufferedOutputStream(new FileOutputStream("E:\\holiday\\java\\io\\write.txt"));
            int len = 0;
            byte[] buf = new byte[1024];
            while ((len = bis.read(buf)) != -1) {
    
    
                bos.write(buf, 0 ,len);
            }
        } catch (IOException e) {
    
    
            e.printStackTrace();
        } finally {
    
    
            if (bos != null){
    
    
                try {
    
    
                    bos.close();
                } catch (IOException e) {
    
    
                    e.printStackTrace();
                }
            }
            if (bis != null){
    
    
                try {
    
    
                    bis.close();
                } catch (IOException e) {
    
    
                    e.printStackTrace();
                }
            }
        }
    }
}

转换流

InputStreamReader、OutputStreamWriter(属于字符流)

作用:提供字节流与字符流之间的转换

对于转换流中的字符集取决于文件保存时的编码格式

标准的输入、输出流

System.in 标准的输入流,默认从键盘输入

System.out 标准的输出流,默认从控制台输出

System类用setIn(InputStream)、setOut(OutputStream)方式重新指定输入和输出的方式

打印流

PrintStream、PrintWriter

数据流

DataInputStream、DataOutputStream

用于读取或写出基本数量类型的变量或字符串

对象流

ObjectInputStream、ObjectOutputStream

用于读取和存储基本数据类型或对象的处理流,强大之处在于可以把Java中的对象写入到数据源,也能把对象从数据源中还原回来。

序列化:用ObjectOutputStream类保存基本数据或对象的机制。

反序列化:用ObjectInputStream类读取基本数据或对象的机制。

对象序列化机制:允许内存中的java对象转换成平台无关的二进制流,从而允许把这种二进制流永久地保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。当其他程序获取了这种二进制流,就可以恢复成原来的java对象。

随机存取文件流

RandomAccessFile实现了DataInput、DataOutput这两个接口,意味着这个类既可读又可写。此对象包含一个记录指针,用于标识当前读写出的位置。

getFilePointer()获取文件记录指针的当前位置

如果此流为输出流,如果写到的文件不存在,则在运行过程中自动创建,

​ 如果写出的文件存在则会覆盖原来内容(默认从头覆盖)。

ByteArrayOutputStream内部有一个数组对于字符来说不会有乱码现象,建议用

猜你喜欢

转载自blog.csdn.net/weixin_45734378/article/details/112861085