date: 2016-08-10 16:54:39
tags:java
IO流
I是输入,读取;O是输出,写入。
读取流:从硬盘中、网络中读取数据的过程
写入流:就是将数据写入到硬盘中。
按照数据类型分为:字节流和字符流。
字节流:将字节数组按照顺序存入、写入到硬盘中,
将字节码翻译成字符串需要编码表(asc,gbk,utf-8(国际通用))
字节流可以处理任何数据类型:视频,音频
字符流:是专门处理字符串的,记事本 不能处理视频,音频。
按照输出方向可以分为输出流和输入流:OutPut Input
硬盘需要写入数据 输出流
从硬盘中读取数据 输入流 相对于我们自己而言。
字节流和字符流的区别:
在字节流中输出数据主要是使用OutputStream完成,输入使的是InputStream,
在字符流中输出主要是使用Writer(将数据写入硬盘)类完成,输入流主要使用Reader(从硬盘中读取)类完成
字节流是最基本的,所有的InputStrem和OutputStream的子类都是,
主要用在处理二进制数据,它是按字节来处理的
但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的encode来处理,
也就是要进行字符集的转化 这两个之间通过 InputStreamReader,OutputStreamWriter来关联,
实际上是通过byte[]和String来关联
在实际开发中出现的汉字问题实际上都是在字符流和字节流之间转化不统一而造成的
字符流:
抽象Write类,FileWrite子类
输出数据到硬盘:
FileWriter步骤:
1. 创建FileWriter
2. 调用Writer方法。 可以调用多次,每次都在后面追加
3. 刷新缓冲
4. 关闭流 关闭之后不能再使用了。关闭时会自动去刷新缓冲区。
IO操作属于资源操作,一定要记得关闭 (采用抛异常处理,将文件关闭放于finally之中)
相关操作
- FileWrite指定文件路径时,如果没有该文件,则创建此文件。
文件追加new FileWriter("文件名",true) true 代表以追加模式写入文件,false则是覆盖
\r\n windows记事本支持的换行。
\n 和\r\n edipulse 支持的换行。相对路径:默认是当前项目的路径下。
FileWriter fw=new FileWriter("a.txt");
FileReader步骤:
1. 创建FileReader
2. 调用Reader方法。 返回每个字符,当读到没有字符时,返回-1;
3. 刷新缓冲
4. 关闭流 关闭之后不能再使用了。关闭时会自动去刷新缓冲区。
FileReader 读取的两种方式
1. 采用fr.read() 方法去读取。
2. 采用fr.read(char[] chars) 去读取, 返回的是读取的个数size,chars里面是读
取的字符(如果size小于字符数组中的个数,则会残留上一次读取的字符串)
- 可采用while循环增强读取。
应用
将相对路径的a.txt文件拷贝到b.txt中
package com.vdata;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
* 文件复制:将项目下的a.txt复制到项目下的copy.txt
* @author zwy
*/
public class Demo10 {
public static void main(String[] args) {
//读取
FileReader fr=null;
//写入
FileWriter fw=null;
//第一种复制
/*int num;
try {
fr=new FileReader("a.txt");
fw=new FileWriter("b.txt");
while ((num=fr.read())!=-1) {
fw.write((char)num);
}
} catch (IOException e) {
e.printStackTrace();
}finally{
if(fw!=null)
fw.close();
if(fr!=null)
fr.close();
}
*/
//第二种复制方式
int size;
char[] chars=new char[4];
try {
fr=new FileReader("a.txt");
fw=new FileWriter("c.txt",false);
while((size=fr.read(chars))!=-1){
fw.write(chars, 0, size);;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{ //确保关闭流
try {
if(fw!=null)
fw.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
if(fr!=null)
fr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}