Java笔记_基础_IO

I/O体系:

非流式: File

流式: 字节流: 输入:InputStream 输出:OutputStream 字符流; 输入:Reader 输出:Writer
以内存为主体 输入: 硬盘 -> 内存 输出: 内存 -> 硬盘

非流式:

文件和文件夹: File

用来创建/操作文件和文件夹的对象

方法返回值说明
File(String str)构造方法根据文件路径创建对象
File(String str, String str)构造方法根据拼接后文件路径创建对象
File(File f, String str)构造方法根据拼接后文件路径创建对象
length()long获取路径文件大小(单位:byte)
createNewFile()boolean创建一个文件
mkdir()boolean创建一个单级文件夹
mkdirs()boolean创建多级文件夹
delete()boolean删除文件或空文件夹(无法删除非空文件夹,不经过回收站)
isDirectory()boolean测试路径是否为文件夹
isFlie()boolean测试路径是否为文件
isexists()boolean测试路径是否存在
getName()String获取文件或文件夹名称
listFiles()File[]获取该目录文件夹内所有文件和文件夹的路径

流式:

方法返回值说明
flush()void刷新流
close()void释放资源,一般先刷新再关闭,每个流使用完必须释放资源

字节输出流: FileOutputStream

方法返回值说明
FileOutputStream(File f)构造方法根据File对象创建一个文件,并获取其字节输出流(若已存在,则清空内容)
FileOutputStream(String str)构造方法根据 str 路径创建一个文件,并获取其字节输出流
FileOutputStream(String str, boolean b)构造方法根据 str 路径创建一个文件,并获取其字节输出流 b:续写开关 true则不清空
write(byte[])void写入字节
write(byte[], int i1, int i2)void写入字节,从第 i1 个开始,写入 i2 个
import java.io.File;
import java.io.FileOutputStream;

public class Demo {
    public static void main(String[] args) throws Exception {
        File f = new File("D:/新建文件夹/a.txt");
        FileOutputStream fout = new FileOutputStream(f);
        byte[] bs = "是谁在唱歌?\n温暖了寂寞!\n\"此处广告位招租\"".getBytes("GBK"); //将字符串以 GBK 编码转为字节数组 \n表示换行 由于 " 字符有特殊含义故加 \ 转义
        fout.write(bs);
        fout.close(); //不要忘记关闭流!
    }
}

运行结果:
字节输出

字节输入流: FileInputStream

方法返回值说明
FileInputStream(File f)构造方法获取一个文件的字节输入流
FileInputStream(String str)构造方法获取一个文件的字节输入流
read()int读取文件内容(一个字节)返回该字节对应的码值
read(byte[] bs)int读取文件内容, bs.length 个字节存入形参数组 返回读取到的字节个数 若读取完则返回 -1
import java.io.File;
import java.io.FileInputStream;

public class Demo {
    public static void main(String[] args) throws Exception {
        File f = new File("D:/新建文件夹/a.txt");
        FileInputStream fin = new FileInputStream(f);
        byte[] bs = new byte[1024 * 1024]; //一次读取 1024*1024 个字节 即 1mb
        int a;
        while ((a = fin.read(bs)) != -1) { //循环读取文件内容直到读完
            String s = new String(bs, 0, a, "GBK"); //以 GBK 编码将读取到的转换成字符串
            System.out.print(s);
        }
        fin.close(); //不要忘记关闭流!
    }
}

运行结果:

是谁在唱歌?
温暖了寂寞!
“此处广告位招租”

字节缓冲输出流: BufferedOutputStream

用法同FileOutputStream 效率更高

方法返回值说明
BufferedOutputStream(FileOutputStream fout)构造方法通过字节流获取字节缓冲流

字节缓冲输入流: BufferedInputStream

用法同FileInputStream 效率更高

方法返回值说明
BufferedInputStream(FileInputStream fin)构造方法通过字节流获取字节缓冲流

字符输出流: FileWriter

仅适用于文本文件

方法返回值说明
FileWriter(File f)构造方法根据File对象创建一个文件,并获取其字符输出流(若已存在,则清空内容)
FileWriter(String str)构造方法根据 str 路径创建一个文件,并获取其字符输出流
FileWriter(String str, boolean b)构造方法根据 str 路径创建一个文件,并获取其字符输出流 b:续写开关 true则不清空
write(char[] cs)void写入字符
write(char[] cs, int i1, int i2)void写入字符从第 i1 个开始,写入i2个
write(String str)void写入字符串
write(String str, int i1, int i2)void写入字符串从第 i1 个字符开始,写入i2个
import java.io.File;
import java.io.FileWriter;

public class Demo {
    public static void main(String[] args) throws Exception {
        File f = new File("D:/新建文件夹/a.txt");
        FileWriter fw =new FileWriter(f);
        fw.write("白云悠悠蓝天依旧\n泪水在漂泊\n\"此处广告位招租\""); //字符流可以直接输出字符,不必转换为字节,但只适用于文本文件
        fw.close();
    }
}

运行结果:
字符输出

字符输入流: FileReader

仅适用于文本文件

方法返回值说明
FileReader(File f)构造方法获取一个文件的字符输入流
FileReader(String str)构造方法获取一个文件的字符输入流
read()int读取文件内容(一个字符) 返回对应码值
read(char[] cs)int读取文件,数组长度个字符存入数组 返回读取的字节个数 若读取完则返回 -1
import java.io.File;
import java.io.FileReader;

public class Demo {
    public static void main(String[] args) throws Exception {
        File f = new File("D:/新建文件夹/a.txt");
        FileReader fr = new FileReader(f);
        char[] cs = new char[1024 * 1024]; //一次读取 1024*1024 个字符 注: 一个字符不一定为一个字节,故此处不一定为 1mb
        int a;
        while ((a = fr.read(cs)) != -1) {
            String s = new String(cs, 0, a);
            System.out.println(s);
        }
        fr.close();
    }
}

运行结果:

白云悠悠蓝天依旧
泪水在漂泊
“此处广告位招租”

字符缓冲输出流: BufferedWriter

用法同FileWriter 效率更高

方法返回值说明
BufferedWriter(FileWriter fw)构造方法通过字符流获取字符缓冲流
BufferedReader(InputStreamReader inr)构造方法将转换流转为字符缓冲流
newLine()void写入分行符(换行)

字符缓冲输入流: BufferedReader

用法同FileReader 效率更高

方法返回值说明
BufferedReader(FileReader fr)构造方法通过字符流获取字符缓冲流
BufferedWriter(OutputStreamWriter outw)构造方法将转换流转为字符缓冲流
readLine()String直接读取一行字符串,若没有返回null

转换输出流: OutputStreamWriter

方法返回值说明
OutputStreamWriter(OutputStream out, “GBK”)构造方法将字节流以指定编码转为转换流
import java.io.*;

public class Demo {
    public static void main(String[] args) throws Exception {
        File f = new File("D:/新建文件夹/a.txt");
        FileOutputStream fout = new FileOutputStream(f); //字节输出流
        OutputStreamWriter out = new OutputStreamWriter(fout, "UTF-8"); //转换输出流
        BufferedWriter bw = new BufferedWriter(out); //字符输出流
        bw.write("随风奔跑自由是方向");
        bw.close();
    }
}

运行结果:
转换输出

转换输入流: InputStreamReader

转换流一般用于解决中文乱码
可以将字节流以指定编码转换为字符缓冲流

方法返回值说明
InputStreamReader(new InputStream(路径), “GBK”)构造方法将字节流以指定编码转为转换流
import java.io.*;

public class Demo {
    public static void main(String[] args) throws Exception {
        File f = new File("D:/新建文件夹/a.txt");
        FileInputStream fin = new FileInputStream(f); //字节输入流
        InputStreamReader in = new InputStreamReader(fin, "UTF-8"); //转换输入流
        BufferedReader br = new BufferedReader(in); //字符输入流
        char[] cs = new char[1024 * 1024];
        int a;
        while ((a = br.read(cs)) != -1) {
            String s = new String(cs, 0, a);
            System.out.println(s);
        }
    }
}

运行结果:

随风奔跑自由是方向

对象输出流: ObjectOutputStream

想要被输出对象中必须实现: Serializable接口
若对象类被修改则会抛出异常,需要给对象类增加序列号(private static final long serialVersionUID)

方法返回值说明
ObjectOutputStream(FileOutputStream fout)构造方法通过字节流获取对象流
writeObject(Object obj)void直接将对象输出
import java.io.*;

public class Demo {
    public static void main(String[] args) throws Exception {
        File f = new File("D:/新建文件夹/a.txt");
        FileOutputStream fout = new FileOutputStream(f);
        ObjectOutputStream out = new ObjectOutputStream(fout); //对象输出流
        Student student = new Student();
        student.setName("张三");
        student.setAge(21);
        out.writeObject(student);
        out.close();
    }
}

class Student implements Serializable { //对象类
    String name;
    int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }
}

运行结果:
对象输出

对象输入流: ObjectInputStream

方法返回值说明
ObjectInputStream(FileInputStream fin)构造方法通过字节流获取对象流
readObject()Object直接读取对象
import java.io.*;

public class Demo {
    public static void main(String[] args) throws Exception {
        File f = new File("D:/新建文件夹/a.txt");
        FileInputStream fin = new FileInputStream(f);
        ObjectInputStream in = new ObjectInputStream(fin);
        Student student = (Student) in.readObject();
        System.out.println(student);
        in.close();
    }
}

class Student implements Serializable {
    String name;
    int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }
}

运行结果:

Student{name=‘张三’, age=‘21’}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值