JAVA:IO流
一、JAVA流式输入/输出原理
在Java程序中,对于数据的输入/输出操作以“流”(Stream)方式进行;J2SDK提供了各种各样的“流” 类,用以获取不同种类的数据:程序中通过标准的方法输入或输出数据。
二、输入输出流分类
Java.io包中定义多个流类型(类和抽象类)来实现输入/输出功能;可以从几个方面进行分类
1.按 数据流方向 不同可以分为输入流和输出流。
2.按 处理数据单位 不同可以分为字节流和字符流。
3.按 功能 不同可以分为节点流和处理流。
Java.io的四种抽象流类型
输入流:InputStream(字节流),Reader(字符流)
输出流:OutPutStream(字节流),Writer(字符流)
记住,以后说输入流和输出流都是站在程序的角度上来说。
三、节点流和处理流
节点流类型
处理流类型
四、InputStream(输入流)
继承自InputStream的流都是用于向程序中输入数据,且数据的单位为字节(8bit);下图中深色为节点 流,浅色为处理流。
代码案例
【演示:使用FileInputStream流来读取FileInputStream.java文件的内容】
``
package cn.chao.IO;
import java.io.*;
public class TestFileInputStream {
public static void main(String[] args) {
int b = 0;//使用变量b来装调用read()方法时返回的整数
FileInputStream in = null;
/*使用FileInputStream流来读取有中文内容时,出来的是乱码,因为使用InputStream流的read()方法读取的内容时是一个字节一个字节地读取的,
而一个汉字是占用两个字节的,所以读取出来的汉字无法正确显示。*/
// FileReader in = null;
// 使用FileReader流来读取内容时,中英文都可以正确显示,因为Reader流里面的read()方法是一个字符一个字符地读取的,
// 这样每次读取出来的都是一个完整的汉字,这样就可以正确显示了。
try{
in = new FileInputStream("X:\\JAVA\\基础语法\\code\\src\\cn\\chao\\File\\TestFile.java");
} catch (FileNotFoundException e){
System.out.println("系统找不到指定文件");
System.exit(-1);// 系统非正常退出
}
long num = 0;// 使用变量num来记录读取到的字符数
// 调用read()方法时会抛异常,所以需要捕获异常
try{
while((b = in.read())!=-1){
/* 调用int read() throws Exception方法时,返回的是一个int类型的整数
循环结束的条件就是返回一个值-1,表示此时已经读取到文件的末尾了。
System.out.print(b+"\t");//如果没有使用“(char)b”进行转换,那
么直接打印出来的b就是数字,而不是英文和中文了*/
System.out.println((char) b);
// “char(b)”把使用数字表示的汉字和英文字母转换成字符输入
num++;
}
in.close();//关闭输入流
System.out.println();
System.out.println("总共读取了" +num+ "个字节的文件");
} catch (IOException e1){
System.out.println("文件读取错误!");
}
}
}
五、OutputStream(输出流)
继承自OutputStream的流是用于程序中输出数据,且数据的单位为字节(8bit):下图中深色的为节点 流,浅色为处理流。
代码案例
【演示:使用FileInputStream流来读取FileInputStream.java文件的内容】
package cn.chao.IO;
import java.*;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class TestFileOutputStream {
public static void main(String[] args) {
int b = 0;
FileInputStream in = null;
FileOutputStream out = null;
try{
in = new FileInputStream("X:\\JAVA\\基础语法\\code\\src\\cn\\chao\\File\\TestFile.java");
out = new FileOutputStream("X:\\JAVA\\基础语法\\code\\src\\cn\\chao\\File\\TestFileNew.java");
// 指明要写入数据的文件,如果指定的路径中不存在StudentNew.java这样的文件,则系统会自动创建一个
while((b = in.read()) != -1) {
out.write(b);
}
// 调用write(int c)方法把读取到的字符全部写入到指定文件中去
in.close();
out.close();
}catch(FileNotFoundException e){
System.out.println("文件读取失败");
System.exit(-1);
}catch(IOException e1){
System.out.println("文件复制失败");
System.exit(-1);
}
System.out.println("TestFile.TestFileNew.java里面");
}
}