I/O流
流的分类
- 操作数据单位:字节流、字符流
- 数据的流向:输入流、输出流
- 流的角色:节点流、处理流
流的体系结构
抽象基类 | 节点流(或文件流) | 缓存流(处理流的一种) |
---|---|---|
InputStream | FileInputStream | BufferedInputStream |
OutputStream | FileOutputStream | BufferedOutputStream |
Reader | FileReader | BufferedReader |
Writer | FileWriter | BufferedWriter |
字符流输入且输出
File file = new File("hello.txt");
File filecopy = new File("hello1.txt");
FileReader in = null;
FileWriter out = null;
try {
char[] cur = new char[5];
int len;
//构造器true,不会覆盖
out = new FileWriter(filecopy,true);
in = new FileReader(file);
while((len = in.read(cur))!=-1){
out.write(cur,0,len);
}
} catch (IOException e) {
e.printStackTrace();
}finally{
if(out!=null){
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(in!=null){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
字节流输入输出
File file = new File("q.png");
File filecopy = new File("q1.png");
FileInputStream in = null;
FileOutputStream out = null;
try {
//构造器true,不会覆盖
byte[] cur = new byte[5];
int len;
out = new FileOutputStream(filecopy,true);
in = new FileInputStream(file);
while((len = in.read(cur))!=-1){
out.write(cur,0,len);
}
} catch (IOException e) {
e.printStackTrace();
}finally{
if(out!=null){
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(in!=null){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
处理流之一缓存流
提高流的读写速度,原因:内部提供了一个缓存区
- 代码
//造文件
File srcfile = new File("1.png");
File destfile = new File("2.png");
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
//造流
//造节点流
FileInputStream fis = new FileInputStream(srcfile);
FileOutputStream fos = new FileOutputStream(destfile);
//造缓冲流
bis = new BufferedInputStream(fis);
bos = new BufferedOutputStream(fos);
//复制的细节:读取、写入
byte[] buffer = new byte[1024];
int len;
while((len = bis.read(buffer))!=-1){
bos.write(buffer,0,len);
}
} catch (IOException e) {
e.printStackTrace();
}finally {
if(bis!=null){
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(bos!=null){
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
处理流的一种:转换流
读取UTF-8
InputStreamReader isr = null;
try {
FileInputStream fis = new FileInputStream("UT8-8.TXT");
isr = new InputStreamReader(fis, "UTF-8");
char[] cbuf = new char[20];
int len;
while((len=isr.read(cbuf))!=-1){
for(int i =0;i<cbuf.length;i++){
System.out.println(cbuf[i]);
}
}
} catch (IOException e) {
e.printStackTrace();
}finally {
if(isr!=null){
try {
isr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}