直接上代码
/**
* 注意点一:
* 节流没有缓冲区,是直接输出的,而字符流是输出到缓冲区的。因此在输出时,字节流不调用close()方法时,
* 信息已经输出了,而字符流只有在调用close()方法关闭缓冲区时,信息才输出。要想字符流在未关闭时输出信息,
* 则需要手动调用flush()方法。
*
* 注意点二:
* 字节流能读取的数据有:rar、zip、png、jpeg等
* 字符流能读取的数据为:txt等
* 字节流处理的数据单位为:1个字节=8bit
* 字符流处理的数据单位为:1个字符=2个字节 ;一个汉字占两个字节
*/
public class TestIO {
public static void main(String[] args) throws Exception {
//字节流:读、写文件
FileInputStream is = new FileInputStream("xxx");
FileOutputStream os = new FileOutputStream("xx");
PrintStream ps = new PrintStream(new FileOutputStream("xxx"));
//字符流:读、写文件
/**
* PrintStream类相比较于PrintWriter
* PrintStream 是字节打印流,PrintWriter是字符打印流
* 如System.out.print()就是PrintStream中的方法
*/
Reader read = new BufferedReader(new InputStreamReader(new FileInputStream("xxx"),"UTF-8"));
Writer write = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("xxx")));
PrintWriter pw = new PrintWriter(new FileOutputStream("xxx"));
/**
* 字节流到字符流的转换:
* InputStreamReader
* OutputStreamWriter
* 上述两个流本身是字符体系中的成员,但具有转换作用,能讲字节流转换为字符流。
* 字符流能进行按行读取
*/
BufferedReader read1 = new BufferedReader(new InputStreamReader(new FileInputStream("xxx"),"UTF-8"));
read1.readLine();
/**
* 处理流:
* BufferedReader、BufferedWriter、BufferedInputStream、BufferedOutputStream
* 都要包装上一层节点流,也就是说处理流是在节点流的基础上进行的,
* 带有Buffered的流又称为缓冲流,缓冲流处理文件的输入输出是最快的。一般缓冲流使用的比较多
*
*/
BufferedReader read2 = new BufferedReader(new InputStreamReader(new FileInputStream("xxx")));
InputStream in = new BufferedInputStream(new FileInputStream("xxx"));
//补充文件的拷贝
byte[] arr = new byte[1024 * 8];
int res = 0;
while ( (res=is.read(arr)) != -1){
os.write(arr, 0, res); //最后一次可能不足 1024*8个字节
}
}
}