Java流的概念
流(Stream)是指在计算机的输入输出操作中各部件之间的数据流动。按照数据的传输方向,流可分为输入流与输出流。Java语言里的流序列中的数据既可以是未经加工的原始二进制数据,也可以是经过一定编码处理后符合某种特定格式的数据。Java提供了两种类型的输入输出流:一种是面向字节的流,数据的处理以字节为基本单位;另一种是面向字符的流,用于字符数据的处理。字节流(ByteStream)每次读写8位二进制数,也称为二进制字节流或位流。字符流一次读写16位二进制数,并将其做一个字符而不是二进制位来处理。
Java I/O中流的层次结构如图:
针对一些频繁的设备交互,Java语言系统预定了3个可以直接使用的流对象,分别是:System.in(标准输入),通常代表键盘输入。
System.out(标准输出):通常写往显示器。
System.err(标准错误输出):通常写往显示器。
在Java语言中使用字节流和字符流的步骤基本相同,以输入流为例,首先创建一个与数据源相关的流对象,然后利用流对象的方法从流输入数据,最后执行close()方法关闭流。
纯文本读取
public class Demo01 {
/**
* @param args
*/
public static void main(String[] args) {
//创建源
File src =new File("E:/test/test.txt");
//选择流
Reader reader =null;
try {
reader =new FileReader(src);
//读取操作
char[] flush =new char[1024];
int len =0;
while(-1!=(len=reader.read(flush))){
//字符数组转成 字符串
String str =new String(flush,0,len);
System.out.println(str);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("文件不存在");
} catch (IOException e) {
e.printStackTrace();
System.out.println("文件读取失败");
}finally{
try {
if (null != reader) {
reader.close();
}
} catch (Exception e2) {
}
}
}
}
写出文件
public class Demo02 {
/**
* @param args
*/
public static void main(String[] args) {
//创建源
File dest =new File("E:test/test.txt");
//选择流
Writer wr =null;
try {
//追加文件,而不是覆盖文件
wr =new FileWriter(dest);
//写出
String msg ="一本小破书\r\n一读一上午";
wr.write(msg);
wr.append("这是追加的内容 ");
wr.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}finally{
try {
if (null != wr) {
wr.close();
}
} catch (Exception e2) {
}
}
}
}
纯文本的拷贝
public class CopyFileDemo {
/**
* @param args
*/
public static void main(String[] args) {
//创建源 仅限于 字符的纯文本
File src =new File("E:/test/Demo03.java");
File dest =new File("E:/test/test.txt");
//选择流
Reader reader =null;
Writer wr =null;
try {
reader =new FileReader(src);
wr =new FileWriter(dest);
//读取操作
char[] flush =new char[1024];
int len =0;
while(-1!=(len=reader.read(flush))){
wr.write(flush, 0, len);
}
wr.flush();//强制刷出
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("源文件不存在");
} catch (IOException e) {
e.printStackTrace();
System.out.println("文件读取失败");
}finally{
try {
if (null != wr) {
wr.close();
}
} catch (Exception e2) {
}
try {
if (null != reader) {
reader.close();
}
} catch (Exception e2) {
}
}
}
}