Java学习之IO字节流读写

一、IO概念与分类

1. 概念
  • I:input,输入,读取,把硬盘中的数据,读取到内存中使用
  • O:output:输出,写入,把内存中的数据,读取到硬盘中保存
  • 流:数据(字符,字节),1个字符=2个字节,1个字节=8个二进制位
2. 分类
IO流输入流输出流
字节流InputStreamOutputStream
字符流ReaderWriter

二、OutputStream

1. 子类
子类作用
ByteArrayOutputStream往字节数组中写数据
FileOutputStream往文件中写数据
FilterOutputStream带过滤器的字节输出流
ObjectOutputStream写入对象
PiplineOutputStream管道流
2. 子类共性方法
方法作用参数
close()关闭输出流并施放与此流有关的所有系统资源
flush()刷新此输出流并强制写出所有缓冲的输出字节
write(byte[ ] b)将b.length个字节从指定的byte数组写入此输出流
write(byte[ ] b, int off, int len)将指定byte数组从偏移量off开始的len个字节写入此输出流off代表从byte数组的第几个索引开始写,len代表写几个
write(int b)将指定的字节写入此输出流

三、FileOutputStream

1. 作用
  • FileOutputStream是OutputStream的子类
  • 用于向文件中写入数据
2. 单次写入
方法参数作用
FileOutputStream(String name)name:文件路径创建一个FileOutputStream对象,若文件没有则会创建
FileOutputStream(File file)file:文件创建一个FileOutputStream对象,若文件没有则会创建
  • 代码演示:写入byte数据
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class DemoOutputStream {
    public static void main(String[] args) throws IOException {
        
        // 写入单个byte数据
        FileOutputStream fos = new FileOutputStream("a.txt");
        fos.write(97);  // 写入byte字节流,97对应的字符为“a”
        fos.close();
        
        // 写入byte数组
        FileOutputStream fos2 = new FileOutputStream(new File("b.txt"));
        byte[] b2 = {65, 66, 67, 68, 69};  // 编写byte数组
        fos2.write(b2);  // ABCDE
        fos2.close();
        
        // 写入byte数组,指定写入的偏移量
        FileOutputStream fos3 = new FileOutputStream(new File("c.txt"));
        byte[] b3 = {65, 66, 67, 68, 69};
        fos3.write(b3, 1, 2);  // 从第1个索引开始写,写2个,结果为BC
        fos3.close();
    }
}
  • 代码演示:写入字符串
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class DemoOutputStream {
    public static void main(String[] args) throws IOException {

        FileOutputStream fos4 = new FileOutputStream(new File("d.txt"));
        byte[] bytes = "你好".getBytes();  // 字符串转换为byte数组
        fos4.write(bytes);
        fos4.close();
    }
}
3. 数据追加
方法参数
FileOutputStream(String name, boolean append)append为追加的开关,当为true时,继续在末尾追加;如果为false,则会覆盖源文件
FileOutputStream(File file, boolean append)同上
  • 代码演示
import java.io.FileOutputStream;
import java.io.IOException;

public class DemoOutputStream {
    public static void main(String[] args) throws IOException {
        FileOutputStream fos = new FileOutputStream("a.txt");
        fos.write(97);  // 写入byte字节流
        fos.close();

        FileOutputStream fos2 = new FileOutputStream("a.txt", true);
        fos2.write(98);
        fos2.close();  // ab
    }
}
4. 换行写入
  • 换行符号
系统符号
window\r\n
linux/n
mac/r
  • 代码演示
import java.io.FileOutputStream;
import java.io.IOException;

public class DemoOutputStream {
    public static void main(String[] args) throws IOException {
        FileOutputStream fos = new FileOutputStream("a.txt");
        for (int i = 1; i < 10; i++) {
            fos.write("你好".getBytes());
            fos.write("\r\n".getBytes());  // 换行
        }
        fos.close();
    }
}

四、InputStream

1. 子类
子类作用
AudioInputStream读取音频
ByteArrayInputStream读取字节数组
FileInputStream读取字节数组
FilterInputStream过滤读取
ObjectInputStream读取对象
PiplineInputStream读取管道流
SequenceInputStream读取队列
StringBufferInputStream读取字符串缓冲区
2. 子类共性方法
方法作用
close()关闭输入流并释放与该流关联的所有系统资源
read()一次读取一个字节,返回字节,读取完毕返回-1
read(byte[ ] b)读取一定数量的字节,并将其存储在缓冲区数组 b 中,读取完毕返回-1

五、FileInputStream

1. 作用
  • FileInputStream是InputStream的子类
  • 用于从文件中读取数据
2. 读取方法
方法参数
FileInputStream(String name)数据源的路径
FileInputStream(File file)数据源的文件
  • 代码演示
import java.io.FileInputStream;
import java.io.IOException;

public class DemoFile {
    public static void main(String[] args) throws IOException {

        // 一次读取一个字节
        FileInputStream fis = new FileInputStream("a.txt");
        int len; // 记录读取到的字节
        while ((len = fis.read())!= -1){
            System.out.println(len);
        }
        fis.close();

        // 一次读取多个字节
        FileInputStream fis2 = new FileInputStream("a.txt");  // 原文件内容为abcde
        byte[] bytes = new byte[1024];  // 定义一次读取2个字节
        int len2; // 记录读取的有效字节个数
        while((len2 = fis2.read(bytes)) != -1) {
            System.out.println(new String(bytes, 0, len2));
        }
        fis2.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值