一、分类
java中的流分为字节流和字符流,按照流向也可以分为输入流和输出流。
字符流和字节流的使用范围:字节流一般用来处理图像,视频,以及PPT,Word类型的文件。字符流一般用于处理纯文本类型的文件,如TXT文件等,字节流可以用来处理纯文本文件,但是字符流不能用于处理图像视频等非文本类型的文件。
处理流BufferedReader,BufferedWriter,BufferedInputStream
,BufferedOutputsStream,都要包上一层节点流。也就是说处理流是在节点流的基础之上进行的,带有Buffered的流又称为缓冲流,缓冲流处理文件的输入输出的速度是最快的。所以一般缓冲流的使用比较多。
package com.javaBase.IO;
import java.io.*;
/**
* 〈一句话功能简述〉;
* 〈功能详细描述〉
*
* @author jxx
* @see [相关类/方法](可选)
* @since [产品/模块版本] (可选)
*/
public class BufferFileCopy {
public static void main(String[] args){
File src = new File("1.txt");
File dest = new File("2.txt");
fileCopy2(src,dest);
}
/**
* 使用字符流文件复制
* @param src
* @param dest
*/
public static void fileCopy1(File src, File dest) {
FileReader fr = null;
FileWriter fw = null;
BufferedReader br = null;
BufferedWriter bw = null;
try {
fr = new FileReader(src);
fw = new FileWriter(dest);
br = new BufferedReader(fr);
bw = new BufferedWriter(fw);
String str = null;
while ((str = br.readLine()) != null) {
bw.write(str);
bw.newLine();
bw.flush();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(br != null) br.close();
if(bw != null) bw.close();
if(fw != null) fw.close();
if(fr != null) fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 使用字节流文件复制
* @param src
* @param dest
*/
public static void fileCopy2(File src, File dest) {
FileInputStream fis = null;
FileOutputStream fos = null;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
fis = new FileInputStream(src);
fos = new FileOutputStream(dest);
bis = new BufferedInputStream(fis);
bos = new BufferedOutputStream(fos);
int len;
byte[] b = new byte[1024];
while((len = bis.read(b)) != -1) {
//bis.read(b) 将读取的字节写入数组,返回写入的长度(len),最长写入1024个字节
bos.write(b,0,len);
bos.flush();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(fis != null) fis.close();
if(fos != null) fos.close();
if(bis != null) bis.close();
if(bos != null) bos.close();
} catch (IOException e) {
e.printStackTrace() ;
}
}
}
}