文件输入(FileInputStream)、输出(FileOutputStream)流操作

😊 @ 作者: 一恍过去
🎊 @ 社区: Java技术栈交流
🎉 @ 主题: 文件输入(FileInputStream)、输出(FileOutputStream)流操作
⏱️ @ 创作时间: 2022年03月15日

在这里插入图片描述

1、InputStream

1、InputStream
InputStream是Java中用于读取字节数据的抽象类。它是Java I/O(输入/输出)库的一部分,提供了读取字节数据的基本功能和方法。InputStream类用于从不同来源(如文件、网络连接等)读取字节流,并提供了多种方法用于读取数据。

常用的InputStream的子类包括:

  • FileInputStream: 从文件中读取数据的输入流。
  • ByteArrayInputStream: 从字节数组中读取数据的输入流。
  • PipedInputStream: 与PipedOutputStream配合使用,在多线程间进行管道通信。
  • FilterInputStream的具体子类(如BufferedInputStream和DataInputStream): 提供了对底层输入流进行过滤和功能增强。

在读取数据时,InputStrea提供了read()方法,用于读取单个字节数据,并在读取完所有数据后返回-1。通常,读取的字节数据可以根据实际需要转换为字符、整数等其他类型数据进行处理。

需要注意的是,在使用InputStream读取数据时,要适当处理异常并关闭流以释放资源,防止资源泄漏和错误处理。另外,在高性能场景下,可以考虑使用BufferedInputStream来提高读取效率。

2、FileInputStream
FileInputStream类用于从文件中读取数据。它继承自InputStream类,并提供了各种方法用于读取不同类型的数据,如字节、字符等。
通过创建FileInputStream对象并指定要读取的文件路径,可以从文件中读取数据。通过read()方法读取,直到返回-1

public void readInputStreamFile() throws IOException {
    try (InputStream in = new FileInputStream("demo.txt");){        
        int n;
        // 利用while同时读取并判断
        while ((n = in.read()) != -1) {
            System.out.println(n);
        }
    }
}
//注意此时try(obj)会自动调用close方法,如果是try{}需要调用in.close()关闭流

3、缓存
将读取的字节存入缓冲区,进行高效的读取。

int read(byte[] b):读取若干字节并填充到byte[]数组,返回读取的字节数
int read(byte[] b, int off, int len):指定byte[]数组的偏移量和最大填充数

public void readInputStreamFile() throws IOException {
    try (InputStream in = new FileInputStream("demo.txt");){        
        int n;
 		// 定义1024个字节大小的缓冲区:
        byte[] buffer = new byte[1024];	
        // 利用while同时读取并判断
        while ((n = in.read(buffer)) != -1) { 
            System.out.println(n);
        }
    }
}

2、OutputStream

1、OutputStream

OutputStream是Java中用于写入字节数据的抽象类。它是Java I/O(输入/输出)库的一部分,提供了写入字节数据的基本功能和方法。OutputStream类用于向不同目标(如文件、网络连接等)写入字节流,并提供了多种方法用于写入数据。

一些常用的OutputStream的子类包括:

  • FileOutputStream: 向文件中写入数据的输出流。
  • ByteArrayOutputStream: 向字节数组中写入数据的输出流。
  • PipedOutputStream: 与PipedInputStream配合使用,在多线程间进行管道通信。
  • FilterOutputStream的具体子类(如BufferedOutputStream和DataOutputStream): 提供了对底层输出流进行过滤和功能增强。

在写入数据时,可以使用write(byte[] data)方法将整个字节数组写入输出流,也可以使用write(int data)方法将单个字节写入输出流。通常,需要将数据转换为字节数组才能写入输出流。

需要注意的是,在使用OutputStream写入数据时,要适当处理异常并关闭流以释放资源,防止资源泄漏和错误处理。另外,在高性能场景下,可以考虑使用BufferedOutputStream来提高写入效率。

通过write()方法将字节字写入到输出流:

public abstract void write(int b) throws IOException;

OutputStream也有byte[]做缓存和一个flush()方法,该方法用于强制把缓冲区内容输出,通常情况下,我们不需要调用这个flush()方法,因为缓冲区写满了OutputStream数据或者调用close()方法前会调用该方法。

2、FileOutputStream

FileOutputStream是Java中用于向文件写入字节数据的类。它是OutputStream的一个具体子类,用于将字节流写入到文件中。基本示例如下:

public void outputStreamFile() throws IOException {
    try (OutputStream output = new FileOutputStream("demo.txt")) {
    	// 单个字符写入
        output.write(72); // H
        output.write(101); // e
        output.write(108); // l
        output.write(108); // l
        output.write(111); // o
        output.close();
        
	    // 此方法一个个字节写入过于麻烦,可以利用getBytes()方法将字符串转为字节再进行操作
		String str = "hello";
		output.write(str.getBytes("UTF-8")); // hello
    }
}

需要注意的是,如果指定的文件路径不存在,则FileOutputStream会自动创建该文件。如果文件已经存在,FileOutputStream会将新写入的内容覆盖原有内容。如果要追加内容而不是覆盖原有内容,可以使用FileOutputStream的另一个构造函数:

FileOutputStream fileOutputStream = new FileOutputStream("demo.txt", true);

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一恍过去

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值