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();
}
}
}
}