java流总结
流的作用
抽象输入输出的概念,专注于数据在代码和内存之间的沟通
流的分类
1、按输入输出分类
- 输入流:指从程序输入到内存的流
- 输出流:指从内存输入到程序的流
2、按数据格式分类
- 字节流:指数据格式给字节的流
- 字符流:指数据格式为字符的流
java.io 流介绍
1、输入字节流 InputStream(抽象)
InputStream 为所有输入字节流的积类,常用方法:read,close
//InputStream is;
byte[] arr = new byte[1024];
while(is.read(arr) != -1){
System.out.println(new String(arr));
}
is.close();
根据不同的介质(数据来源)提供了
2、输出字节流 OutputStream(抽象)
OutputStream 为所有字节输出流的积类,常用方法:write,flush,close
//OutputStream os;
String msg = "Hello OutputStream";
byte[] arr = msg.getByte();
os.write(arr);
os.flush();
os.close();
3、输入字符流 Reader
Reader输入字符流抽象类。子类需实现 read方法
//Reader rd
char cArr[] = new char[1024] ;
rd.read(cArr);
rd.close();
4、输出字符流 Writer
Reader 输出字符流的抽象类。之类需实现write方法
//Writer wt
String msg = "Hello Writer";
wt.write(msg);
wt.flush();
wt.close();
java 文件字节流
1、FileInputStream、FileOutputStream
用于二进制文件操作
FileInputStream继承于InputStream
FileOutputStream继承于OutputStream
//FileInputStream and FileOutputStream
String msg = "Hello Writer";
FileInputStream fis = new FileInputStream("D:\\test.txt");
FileOutputStream fos = new FileOutputStream("D:\\target.txt");
byte[] tmp= new byte[1024];
int len;
while((len = fis.read(tmp)) != -1){
fos.write(tmp, 0, len);
}
fos.flush();
fos.close();
fis.close();
2、BuffereInputStream、BuffereOutputStream
带有缓冲区的字节输入流,提高文件和内存的沟通效率
继承于 FilterInputStream和FilterOutputStream,FilterInputStream和FilterOutputStream是装饰器流,本身没有实现任何功能,依赖于子类(如BuffereInputStream、BuffereOutputStream)来实现能力
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\test.txt"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\target.txt"));
byte[] tmp = new byte[2*1024];
int len;
while((len = bis.read(tmp)) != -1){
bos.write(tmp, 0, len);
}
bos.flush();
bos.close();
bis.close();
java 文件字符流
InputStreamReader、OutputStreamWriter
这个是io流的重点,它是沟通字节流和字符流的桥梁,用于字节流装换为字符流
InputStreamReader 继承于 reader
OutputStreamWriter 继承于 writer
InputStreamReader isr = new InputStreamReader(new FileInputStream("D:\\test.txt"));
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("D:\\target.txt"));
char[] tmp = new char[1024];
int len;
while((len = isr.read(tmp)) != -1){
osw.write(tmp, 0, len);
}
osw.flush();
osw.close();
isr.close();
FileReader、FileWriter
用于操作字符文件
FileReader继承于InputStreamReader
FileWriter继承于OutputStreamWriter
其用法类似于InputStreamReader、OutputStreamWriter
FileReader fr = new FileReader("D:\\test.txt");
FileWriter fw = new FileWriter("D:\\target.txt");
char[] tmp = new char[1024];
int len;
while((len = isr.read(tmp)) != -1){
osw.write(tmp, 0, len);
}
osw.flush();
osw.close();
isr.close();
BufferedReader、BufferedWriter
很明显是对FileReader、FileWriter的buffered封装
BufferedReader br = new BufferedReader(new FileReader("D:\\test.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\target.txt"));
String readline;
while((readline = br.readLine()) != null){
bw.write(readline);
bw.newLine();
}
bw.flush();
bw.close();
br.close();