什么是IO
IO:Input,Output,java的标准输入输出。
javaIO是以标准的操作对外界设备进行数据交换,并将读写分为输入和输出。
IO是顺序读写方式,只能顺序向后进行读或写操作,并不像RandoAccessFile一样可以同时进行,或者任意读写。
就功能而言,两者一样,但是RAF的灵活性上远远不如IO,基于流连接可以完成复杂数据的读写。
IO分类
按方向:
java.io.inputStream : 所有字节输入流的超类
规定了读取字节的相关方法
java.io.OutputStream : 所有字节输出流的超类
规定了写出字节的相关方法
按使用方式:
节点流与处理流,也称低级流和高级流
节点流:真实连接数据源与程序之间的”管道“,负责实际搬运数据的流。读写一定是建立在节点流的基础上进行的。
处理流:不能独立存在,必须连接在其他流上,使得在读写数据的过程中,当数据流经当处理流时对其做某些加工处理,简化我们对数据的相关操作。
在实际应用中,我们会串联一组高级流并最终连接到低级流上,使得对数据的读写以流水线式的加工读写达到对数据读写的处理,这个过程称为流的连接,也是IO的精髓所在。
IO的使用
写操作
package com.tedu.io;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* 利用文件流完成写操作
*
* @author Wildmess
*
*/
public class FOSDemo {
/*
* 创建文件流的方法
* FileOutputStream(File file)
* FileOutputStream(String path)
* 上面这俩种创建形式都是覆盖输出模式
* 如果当前文件中有内容会全部清除重新写
*
* FileOutputStream(File file,true)
* FileOutputStream(String path,true)
* 追加模式
* 在源文件所有内容的最后再追加输出的内容
* 不会清除源文件的内容
*/
public static void main(String[] args) throws IOException {
//FileOutputStream fos = new FileOutputStream("fos.txt");
FileOutputStream fos = new FileOutputStream("fos.txt",true);//如果没有写true,当第二次调用该程序时会覆盖前一次的
String str = "java天下第一!";
byte[] data = str.getBytes("gbk");
fos.write(data);
System.out.println("程序结束");
fos.close();
}
}
读操作
package com.tedu.io;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
/**
* 使用文件的输入流读取文件的内容
*
* @author Wildmess
*
*/
public class FISDemo {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("fos.txt");//这里读取刚才写好的文件数据
/*
* fis对象是按顺序读取文件中的内容
* int read():
* 从头读取文件中的内容,再次调用获得下一个字符的内容
* 如果读取到末尾返回-1
*
* int read(byte[] data):
* 从头读取数据,将读取到的内容存放到data中
* 如果读取到数据,返回读取到的数据的字节数
* 如果美欧读取到数据,返回-1
* 再次调用从最后读取到的数据后面继续读取
*
*/
byte[] data = new byte[1024];//一次1024个字节的读
int len = fis.read(data);
System.out.println("实际读取了" + len + "个字节");
String str = new String(data,0,len,"gbk");
System.out.println(str);
System.out.println("程序结束!");
fis.close();
}
}