Java的stream按方向可以分为:输出流,输入流;按操作可以分为字节流,字符流。字节流和字符流都有输入和输出两个方向
- 字节流
字节输入流
以字节读取文件内容,每次读取一个字节:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15import java.io.*;
import java.io.File;
import java.io.FileInputStream;
public class test3 {
public static void main(String[] args)throws IOException{
File file = new File("test.txt");
FileInputStream fis = new FileInputStream(file);
int b;
while (( b = fis.read()) != -1){
System.out.println((char)b);
}
fis.close();
}
}以字节读取文件内容,每次读取多个字节:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16import java.io.*;
import java.io.File;
import java.io.FileInputStream;
public class test3 {
public static void main(String[] args)throws IOException{
File file = new File("test.txt");
FileInputStream fis = new FileInputStream(file);
byte[] bys = new byte[1028];
int len = 0;
while (( len = fis.read(bys)) != -1){
System.out.write(bys,0,len);
}
fis.close();
}
}字节输出流
1
2
3
4
5
6
7
8
9
10
11
12
13import java.io.*;
import java.io.File;
public class test3 {
public static void main(String[] args)throws IOException{
File file = new File("test.txt");
String s = "this is storm'blog";
byte[] s1 = s.getBytes();
FileOutputStream fos = new FileOutputStream(file,true);
fos.write(s1);
fos.close();
}
}
- 字符输入流
以字符为单位读取文件内容,在字节编码中,gbk格式一个中文站两个字节,utf-8 格式中一个中文占三个字节,所以在操作中文内容的时候,使用字符流比字节流更方便
- 字符流输入
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18import java.io.*;
import java.io.File;
public class test3 {
public static void main(String[] args)throws IOException{
File file = new File("test.txt");
FileInputStream fis = new FileInputStream(file);
InputStreamReader ifr = new InputStreamReader(fis);
char ch;
ch = (char)ifr.read();
System.out.println(ch);
char[] chs = new char[1024];
ifr.read(chs);
System.out.println(chs);
fis.close();
ifr.close();
}
} - 字符流输出
1
2
3
4
5
6
7
8
9
10
11
12
13
14import java.io.*;
import java.io.File;
public class test3 {
public static void main(String[] args)throws IOException{
File file = new File("test.txt");
FileOutputStream fos = new FileOutputStream(file,true); // true 为缺省参数append的值,表示是否追加模式打开
OutputStreamWriter osw = new OutputStreamWriter(fos, "utf-8");
osw.write("你好");
osw.close(); // 关闭流的时候应该先关闭字符输出流,再关闭文件输出流,否则先关闭文件输出流会抛io异常
fos.close();
}
}