一、概念
什么是流?
数据在数据源(文件)和程序(内存)之间经历的路径
什么是输入流?
数据从数据源(文件)到程序(内存)的路径
什么是输出流?
数据从程序(内存)到数据源(文件)的路径
注意:判断是输入流还是输出流,以内存为参照,如果数据是向内存流动,则是输入流,反之是输出流。
示意图:
什么是文件流?
文件在程序中是以流的形式来操作的。
java流分为两种流:
字节流:可以用于读写二进制文件及任何类型文件
字符流:可以用于读写文本文件
示意图:
javaio流类一览表:
二、代码示例:
package com.llb.jichu;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
public class FileIO {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String directAdd = "E:\\相片\\壁纸\\4.txt";
String destAdd = "E:\\output.txt";
//byteStream(directAdd, destAdd);
charStream(directAdd, destAdd);
//bufferedStream(directAdd, destAdd);
}
/*
* 缓冲字符流示例(按行读写)
* */
public static void bufferedStream(String directAdd, String destAdd){
BufferedReader bReader = null;
BufferedWriter bWriter = null;
try {
FileReader reader = new FileReader(directAdd);
bReader = new BufferedReader(reader);
FileWriter writer = new FileWriter(destAdd);
bWriter = new BufferedWriter(writer);
String str = "";
while((str=bReader.readLine()) != null){
System.out.println(str);
bWriter.write(str);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
//关闭流
bReader.close();
bWriter.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/*
* 字符流示例(只能读写文本文件)
* */
public static void charStream(String directAdd, String destAdd){
FileReader read = null;
FileWriter writer = null;
try {
read = new FileReader(directAdd);
writer = new FileWriter(destAdd);
char[] chars = new char[1024];
int len = 0;
while((len=read.read(chars)) != -1){
writer.write(chars);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//关闭流
try {
read.close();
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/*
* 字节流示例(可以用于读写二进制文件及任何类型文件)
*
* */
public static void byteStream(String directAdd, String destAdd){
FileInputStream input = null;
FileOutputStream output = null;
try {
input = new FileInputStream(directAdd);
output = new FileOutputStream(destAdd);
byte[] bytes = new byte[1]; //定义一个字节数组,相当于缓冲
int len = 0; //实际读取到的字节数
while((len=input.read(bytes)) != -1){
//把字节转成string
output.write(bytes);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//关闭流
try {
input.close();
output.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}