一次读取一个字节
public static void read1() throws IOException {
// 1. 建立程序与文件之间的连接,用来读取这个文件
try(InputStream inputStream = new FileInputStream("test1.txt")){
//2.读取数据,先声明一个变量,read方法的返回值,就是读取的数据
//注意:返回-1,默认认为数据读完了 int num = 0;
// num = inputStream.read();
//3.直接读取数据
//想显示字符需要自己强转
// System.out.println((char)num);
// num = inputStream.read();
// System.out.println((char)num);
// num = inputStream.read();
// System.out.println((char)num);
// num = inputStream.read();
// System.out.println((char)num);
// num = inputStream.read();
// System.out.println((char)num);
// num = inputStream.read();
// System.out.println(num);
//返回-1,默认认为数据读完了
//4.使用循环读取数据
while ((num = inputStream.read()) != -1) {
System.out.print((char)num);
}
} catch (IOException e) {
e.printStackTrace();
}
}
一次读取多个字节
public static void read2() throws IOException {
// 1. 建立程序与文件之间的连接,用来读取这个文件
try (InputStream inputStream = new FileInputStream("test1.txt")) {
// 2. 读取字节流中的数据,需要有一个字节数组,用来读取数据
//创建临时数组
/* 数组是临时存放数据的地方,我们会将读到的字符放到临时数组中,数组的 大小决定了我们一次可以读到的字符个数.
* 一般这个数组的大小<=1kB
* 返回值代表本次读到的真实的字符个数,如果返回值是-1代表读完了.
*/
byte[] arr = new byte[2];
// 3. 声明一个整型变量,用来记录每次读取了多少个字节的数据
int num = 0;
//4.直接读取数据
// num = reader.read(arr);
// System.out.println(new String(arr,0,num)+" num:"+num);
// num = reader.read(arr);
// System.out.println(new String(arr,0,num)+" num:"+num);
// num = reader.read(arr);
//转部分字符到字符串,第二个参数是指定的下标,第三参数是字符数量
// 将读取到的字节数组中的数据,转成字符串输出
// 为了去除最后一次进行读取数据的时候,上次读取残留的问题
// 最后一次读取的数据,只有指定部分是我们需要的数据
// System.out.println(new String(arr,0,num)+" num:"+num);
// num = reader.read(arr);
// System.out.println(" num:"+num);
//5.使用循环读取数据
while ((num = inputStream.read(arr)) != -1){
System.out.println(new String(arr,0,num)+" num:"+num);
}
} catch (IOException e) {
e.printStackTrace();
}
}
一次性全部读入
public static void read3() throws IOException {
// 1. 建立程序与文件之间的连接,用来读取这个文件
try (InputStream inputStream = new FileInputStream("test1.txt")) {
// 2. 读取字节流中的数据,需要有一个字节数组,用来读取数据
//获取文件的字节个数
//注意:这种方式适合文件的字节数比较小的时候,大概是几kb之内.
int num = inputStream.available();
//2.读
byte[] bytes = new byte[num];
inputStream.read(bytes);
System.out.println(new String(bytes));
} catch (IOException e) {
e.printStackTrace();
}
}
字节输出流
public class OutputStreamTest {
public static void main(String[] args) {
// 1. 实例化一个管道,连接文件和程序。
// 对于FileOutputStream来说,如果目标文件不存在,则会自动的创建,如果 存在,会将原来的内容覆盖
// 当无法创建这个文件的时候(父级目录不存在),创建会失败,会触发 FileNotFoundException 。
//OutputStream outputStream = new FileOutputStream("test1.txt")
//文件的续写:FileWriter(String file,boolean value)
//当value位true的时候,不会将原来的内容覆盖,会接着写
try (OutputStream outputStream = new FileOutputStream("test1.txt",true)) {
// 2. 准备需要写入到这个文件中的数据 String message = "你好,师姐";
// 3. 将数据写入到输出流中,由输出流写入到文件中
//将字符串转成字节数组
outputStream.write(message.getBytes());
// 冲刷缓冲区,将缓冲区中的数据强制流动到文件中。
// 在流关闭的时候,会自动的调用。
//注意:当我们进行循环写入操作时,最好通过flush()方法刷新
outputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}