Java IO流

写在开头

概述

  1. IO : 两个单词的缩写, input,output, input表示输入的意思,output表示输出
    IO中的输入输出流向:

IO 能做设备之间的数据通信,java中所有的流都来自于java.io包中

  1. IO分类:
    流向上分类: 输入流(input)和输出流(output)
    功能上分类: 字节流和字符流
    字节流:
    InputStream : 字节输入流,抽象类
    OutputStream : 字节输出流,抽象类
    字符流:
    Reader : 字符输入流,抽象类
    Writer: 字符输出流,抽象类

  2. IO流的书写规则
    1) 使用流对象之前,先导包,java.io
    2) 使用流对象时,需要抛出异常IOException
    3) 使用流对象结束,一定记得关闭流资源( close() )

字节流

字节输入流

字节输入流InputStream

InputStream : 是一个抽象类,就表示字节的输入流,不能实例化对象的,于是需要一个子类FileInputStream,FileInputStream能操作磁盘上文件的读取操作

常用方法:

  1. read() : 表示每次从文件中读一个字节,返回这个字节的int类型的数据,当返回值结果是-1的时候,表示文件中没有内容了,读到最后了,其他情况都会返回一个int类型的数据
  2. read(byte[] b) : 表示每次从文件中读一个字节数组的长度,返回值类型是int类型,表示数组b每次读到了几个字节,如果返回值是-1,证明文件读完了
  3. read(byte[] b,int off,int length) : 表示每次从文件中读取字节数组b的一部分,int off表示从数组哪个索引开始读, int length : 表示读取的长度
  4. close() : 关闭流资源

字节输入流FileInputStream

FileInputStream : 从磁盘上的文件中,将数据读取到程序中

构造方法:
FileInputStream(File f) : 将File文件封装到字节输入流的对象中,下面可以读File中的文件内容
FileInputStream(String file) : 将String所表示的字符串内容封装到字节输入流的对象中,下面可以读String所表示的字符串的文件内容

常用方法:

  1. read() : 表示每次从文件中读一个字节,返回这个字节的int类型的数据,当返回值结果是-1的时候,表示文件中没有内容了,读到最后了,其他情况都会返回一个int类型的数据
  2. read(byte[] b) : 表示每次从文件中读一个字节数组的长度,返回值类型是int类型,表示数组b每次读到了几个字节,如果返回值是-1,证明文件读完了
  3. read(byte[] b,int off,int length) : 表示每次从文件中读取字节数组b的一部分,int off表示从数组哪个索引开始读, int length : 表示读取的长度
  4. close() : 关闭流资源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class FileInputStreamDemo {

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


FileInputStream fis = new FileInputStream("D:\\file\\aab.txt");
// 读文件内容
// 1. read() : 每次读一个字节,返回值int类型,当返回值结果是-1的时候,表示文件中没有内容了,读到最后了
// 表示从文件D:\\file\\aab.txt 中读取到了一个字节,将这个字节转换成int类型的数据进行输出
/*int result = fis.read();// 97
System.out.println(result);// 97
System.out.println((char)result);// a

int result1 = fis.read();// 98
System.out.println(result1);// 98
System.out.println((char)result1);// b

int result2 = fis.read();
System.out.println(result2);
System.out.println((char)result2);

int result3 = fis.read();
System.out.println(result3);
System.out.println((char)result3);

int result4 = fis.read();
System.out.println(result4);
System.out.println((char)result4);

int result5 = fis.read();
System.out.println(result5);
System.out.println((char)result5);*/

// 每次调用read都向下再去读取一个字节
int len ;
while((len = fis.read()) != -1) {
System.out.println((char)len);
}
// 关闭流资源
fis.close();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//通过字节数组读取文件代码,未优化
import java.io.FileInputStream;
import java.io.IOException;

public class FileInputStreamDemo2 {

public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("D:\\file\\aab.txt");

//read(byte[] b) : 表示每次从文件中读一个b字节数组的长度,然后将数据装进b数组中
// 返回值类型是int类型,表示数组b每次读到了几个字节,如果返回值是-1,证明文件读完了

byte[] b = new byte[2];
int result = fis.read(b);
System.out.println(result);// 2
// 将b数组中读到的字节元素转换成字符串输出
System.out.println(new String(b));// ab

int result1 = fis.read(b);
System.out.println(result1);// 2
System.out.println(new String(b));//12

int result2 = fis.read(b);
System.out.println(result2);//1
System.out.println(new String(b));// 32

int result3 = fis.read(b);
System.out.println(result3);// -1
System.out.println(new String(b));//32

fis.close();
}
}

使用字节数组读取文件的图解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

import java.io.FileInputStream;
import java.io.IOException;

public class FileInputStreamDemo2 {

public static void main(String[] args) throws IOException {
readByte();
}

public static void readByte() throws IOException {
FileInputStream fis = new FileInputStream("D:\\file\\aab.txt");
// 通过循环+字节数组方法读取文件
// 通常通过数组的方式读取文件,一般是将数组大小设置成1024
byte[] b = new byte[2];
int len = 0;
while((len = fis.read(b)) != -1) {
System.out.print(new String(b,0,len));
}
fis.close();
}
}

读取数组的一部分:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

import java.io.FileInputStream;
import java.io.IOException;

public class FileInputStreamDemo3 {

public static void main(String[] args)throws IOException {
FileInputStream fis = new FileInputStream("D:\\file\\aab.txt");
// 3.read(byte[] b,int off,int length) : 表示每次从文件中读取字节数组b的一部分,
// int off表示从数组哪个索引开始读, int length : 表示读取的长度

byte[] b = new byte[1024];

int result = fis.read(b,0,3);
System.out.println(new String(b,0,3));
System.out.println(result);// 3
}
}

字符流

晚安

 今天就到这里了,明天见,加油!

-------------本文结束感谢您的阅读-------------
0%