Java的io流笔记

字节流

代码只显示关键部分。FileInputStream读取文件(需要事前有文件可读取),FileOutputStream输出文件(无文件会自动新建)。
最外层嵌套DataOutputStream,DataInputStream可支持输入输出java的基本数据类型,详情自己看文档~,最外层的流的关了不再需要关里面。

输入流(InputStream)

无缓冲

1
2
3
4
5
6
7
8
9
10
11
12
13
14
InputStream is = new FileInputStream("d:/a.txt");//读取文件
byte[] buffer=new byte[200];//自定义一个字节数组
int length;//定义一个长度变量。
while(-1!=(length=is.read(buffer,0,200))){
//is.read代表每次读的字节长度,当读完后会返回-1,
//这里的is.read里面三个参数分别为存放的字节数组,读取偏移量,读取长度。
//注意:读取偏移量+读取长度<=存放的字节数组长度
String str=new String(buffer,0,length);
//把字节数组转为字符串
//三个参数分别为要转的字节数组,读取偏移量,读取长度。
System.out.println(str);
}
is.close();//关闭输入流

也可以这样

1
2
3
4
5
6
7
8
9
10
11
12
InputStream is = new FileInputStream("d:/a.txt");//读取文件
byte[] buffer=new byte[200];//自定义一个字节数组
int length;//定义一个长度变量。
//这里是每次读取buffer定义的200字节
while(-1!=(length=is.read(buffer))){
String str=new String(buffer).trim();//把字节数组转为字符串,同时去掉前后的空格和空字符。
//String str=new String(buffer,0,length);使用这个不会出现空字符的现象
System.out.println(str);
}
is.close();//关闭输入流

带缓冲

1
2
3
4
5
6
7
8
9
InputStream is = new FileInputStream("d:/a.txt");
BufferedInputStream in =new BufferedInputStream(is);
byte[] buffer=new byte[200];
int length;
while(-1!=(length=in.read(buffer))){
String str=new String(buffer,0,length);
System.out.println(str);
}
in.close();

输出流(OutputStream)

无缓冲

1
2
3
4
5
OutputStream os=new FileOutputStream("d:/b.txt",true);//后面加true表示把内容追加到最后,不加就覆盖原来内容。
String str="hello";
byte[] buffer=str.getBytes();//转换为字节数组
os.write(buffer);
os.close();

带缓冲

1
2
3
4
5
OutputStream os=new FileOutputStream("d:/b.txt");
BufferedOutputStream bos=new BufferedOutputStream(os);
bos.write("hello".getBytes());
//bos.flush();强制清空缓冲
bos.close();

综合使用

无缓冲

1
2
3
4
5
6
7
8
InputStream is = new FileInputStream("d:/a.txt");
OutputStream os = new FileOutputStream("d:/b.txt");
int length;
while(-1!=(length=is.read())) {
os.write(length);
}
os.close();
is.close();

带缓冲

1
2
3
4
5
6
7
8
9
10
InputStream is = new FileInputStream("d:/a.txt");
OutputStream os = new FileOutputStream("d:/b.txt");
BufferedInputStream in =new BufferedInputStream(is);
BufferedOutputStream bos=new BufferedOutputStream(os);
int length;
while(-1!=(length=in.read())) {
bos.write(length);
}
bos.close();
in.close();

字符流

输入流(InputStreamReader),输出流(OutputStreamWriter)

和字节流差不多,就不写那么详细了

1
2
3
4
5
6
7
8
9
10
11
12
13
//输出流
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d:/a.txt")));
bw.write("fffffffffffff");
bw.write("\n");//windows的记事本换行是\r\n
bw.write("aaaaaaaaaaaaaa");
bw.close();
//输入流
BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream("d:/a.txt")));
String str;
while(null!=(str=br.readLine())){
System.out.println(str);
}
br.close();

综合使用

1
2
3
4
5
6
7
8
9
BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream("d:/a.txt")));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d:/b.txt")));
String str=br.readLine();
while(null!=str){
bw.write(str);
str=br.readLine();
}
bw.close();
br.close();

最后

当然实际使用还是要处理异常。finally关闭流。