您的位置:首页 > 编程语言 > Java开发

Java之IO流

2016-05-04 11:32 387 查看

1、名词理解:

(一)首先要明白何为输入流、输出流、字节流、字符流

①输入与输出:



②字节与字符:

字节流:以字节为单位读取数据

字符流:以字符为单位读取数据

(二)然后四个互相结合就有了:输入字节流、输出字节流、输入字符流、输出字符流。

(三)辨别输入流、输出流、字节流、字符流:

①类名中有In的为输入流,有Out的为输出流

②类名以Stream结尾的为字节流

③类名以Reader或Writer结尾,并且里面没有Stream的为字符流

④类名中同时包含Stream和Reader或Stream和Writer,不属于这四种流

2、实际应用(本地文件的读取与写入,测试前别忘了在本地建好测试的文件):

(一)字节输入流:

File file = new File("C:/java.txt");
//创建本地文件对象,路径可以根据自己的需要修改
FileInputStream fileInputStream = new FileInputStream(file);
//创建字节输入流对象
byte[] bs = new byte[fileInputStream.available()];
// available()返回文件中的字节数
fileInputStream.read(bs);
// 将文件的数据以字节的方式读到bs中
String string = new String(bs);
// 字节数组变为字符串
fileInputStream.close();
// 关闭输入流
System.out.println(string);


(二)字节缓冲输入流:

File file = new File("C:/java.txt");
BufferedInputStream bufferedInputStream =
new BufferedInputStream(new FileInputStream(file));
// 在字节输入流的基础上再加工成字节缓冲输入流
int value = 0;
String result;
byte[] bs = new byte[new FileInputStream(file).available()];
bufferedInputStream.read(bs);
// while ((value = bufferedInputStream.read(bs)) != -1) {
// // 直到读完全部数据,但测试了下是一次性读完的
// }
// 也可以用while这样写
System.out.println(new String(bs));


加缓冲的好处是为了提交读文件的效率,下面的缓冲也是同理

(三)字节输出流:

File file_ = new File("C:/java.txt");
FileOutputStream fileOutputStream = new FileOutputStream(file_, true);
// FileOutputStream的第二个参数为是否追加(append)
fileOutputStream.write("FileOutputStream测试\r\n".getBytes());
// \r\n 换行后回车,getBytes将字符串转换成字节类型
fileOutputStream.flush();
// 刷新数据或提交数据
fileOutputStream.close();


(四)字节缓冲输出流:

File file_ = new File("C:/java.txt");
BufferedOutputStream bufferedOutputStream =
new BufferedOutputStream(new FileOutputStream(file_, true));
// FileOutputStream的第二个参数为是否追加(append), 在字节输出流的基础上再加工成字节缓冲输出流
bufferedOutputStream.write("BufferefOutputStream测试\r\n".getBytes());
bufferedOutputStream.flush();
bufferedOutputStream.close();


(五)字符输入流+字符缓冲输入流:

// 字符输入流
File file = new File("C:/java.txt");
FileReader fileReader = new FileReader(file);
char[] cs = new char[1024];
// 固定字符数组的长度
fileReader.read(cs);
// 读取
System.out.println(new String(cs));

// 字符缓冲输入流
FileReader fileReader1 = new FileReader(file);
// 用过一次后不能重复使用
BufferedReader bufferedReader = new BufferedReader(fileReader1);
// 继续加工
String s = "";
String result = "";
while ((s = bufferedReader.readLine()) != null) {
// 先将文件中的数据一行行的赋给s,如果不为空说明还没有读完
result += s;
}
System.out.println(result);
// 关闭的时候从大到小关
fileReader.close();
bufferedReader.close();
fileReader1.close();


(六)字符输出流+字符缓冲输出流:

File file = new File("C:/java.txt");
FileWriter fileWriter = new FileWriter(file, true);
fileWriter.write("FileWriterTest测试\r\n");
fileWriter.flush();

BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
bufferedWriter.write("BufferedWriter测试\r\n");
bufferedWriter.flush();

bufferedWriter.close();
fileWriter.close();
//没有任何特别地东西


(七)字符字节混合使用:

File file = new File("C:/java.txt");
FileInputStream fileInputStream = new FileInputStream(file);
// 字节流读取文件
InputStreamReader inputStreamReader = new InputStreamReader(
fileInputStream);
// 转换成字符流
BufferedReader bufferedReader = new    BufferedReader(inputStreamReader);
// 再用字符流对数据进一步加工
String s;
while ((s = bufferedReader.readLine()) != null) {
System.out.println(s);
}


3、IO流应用很广泛,例如在客户端与服务端之间数据的传送与读取也可以借助IO流去实现,只不过在它们那里是截取流,不是像读取文件这样创建流。在我另一篇博客上也有说明,

网址:http://blog.csdn.net/zhengyikuangge/article/details/50000481

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: