Java IO流(二) 字节流InputStream和OutputStream

InputStream是Java IO中所有字节输入流基类,它是一个抽象类,主要有如下方法

当我们调用其子类的时候读取数据的有3个重载方法:
int read() 从此输入流中读取一个数据字节。
int read(byte[] b) 每次读取 b 数组长度的字节数,然后返回读取的字节,读到末尾时返回-1。
int read(byte[] b,int off,int len) 每次读取 b 数组长度的字节数,从数组b 的索引为off 的位置开始,长度为len个字节。

其中InputStream的子类FileInputStreams是专门用于从文件读取数据到程序(内存)
新建foo.txt文件放在F盘下,其中内容是 HELLOJAVA

package com.mike.io.eg;

import java.io.File;
import java.io.IOException;
import java.io.FileInputStream;
/**
 * @author mike
 * @date 2020-11-24
 * @desc 文件字节输入流demo
 */
public class FileInputStreamDemo {
	public static void main(String[] args) {
		//定义输入流
		FileInputStream fis = null;
		try {
			//创建文件对象
			String filePath = "F:\foo.txt";
			File file = new File(filePath);
			//创建字节输入流对象
			fis = new FileInputStream(file);
			//定义字节数组,保存数据
			byte[] buffer = new byte[5];
			//保存实际读取的字节总数
			int len = 0;
			while((len = fis.read(buffer)) != -1 ) {
				//解析字节为字符串
				System.out.println(new String(buffer,0,len));
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally { 
			try {
				fis.close();
			} catch (IOException e) {
				e.printStackTrace();
			}

		}
	}
}

运行后查看结果输出

有时候使用FileInputStream读取中文字符会出现乱码,这是因为UTF-8一个字符占3个字节,会出现一个汉字没有读完情况,要么加大byte[]容量,对于纯文本最好的办法是使用字符输入流

InputStream是Java IO中所有字节输入流基类,它是一个抽象类,主要有如下方法

  • void write(int b):把一个字节写入到文件中。
  • void write(byte[] b):把数组b 中的所有字节写入到文件中。
  • void write(byte[] b,int off,int len):把数组b 中的字节从 off 索引开始的 len 个字节写入到文件中。

OutputStream的子类FileOutputStream是专门用于将数据写入文件

package com.mike.io.eg;

import java.io.IOException;
import java.io.File;
import java.io.FileOutputStream;
/**
 * @author mike
 * @date 2020-11-25
 * @desc 字节输出流demo
 */
public class FileOutputStreamDemo {
	public static void main(String[] args) {
		//定义字节输出流
		FileOutputStream fos = null;
		try {
			//创建文件对象
			String filePath = "F:\foo.txt";
			File file = new File(filePath);
			//创建输出流对象
			fos = new FileOutputStream(file);
			//将字符串转化为字节数组并写入文件
			fos.write("CHINA".getBytes("UTF-8"));
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				fos.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}


原文地址:https://www.cnblogs.com/gy1010/p/14033219.html