1.字节流输入输出的方向是以Java为标准的。我们可以把文件和Java虚拟机之间想象成有一条通道。数据在通道中可以来回流通,这就有了输入流和输出流。当程序要读取文件的时候,调用程序把文件传入java虚拟机,这是输入流;当程序要向文件内写入数据的时候,数据就会从Java虚拟机中传向文件,这就是输出流。
1.1字节输入流(InputStream)
InputStreams是Java标准库提供的最基本的输入流,位于java.io包里。它不是一个具体的类或者接口,而是一个抽象类。同时它是所有字节输入流的父类。
如何使用字节输入流(InputStream)
1.//因为InputStream是抽象类,所以使用时要引用子类的地址
InputStream fis = new FileInputStream("F:\\test1.txt");//括号内为文件路径
//一次只读取一个字节的方法
public static void demo1() throws IOException {
//1、把外部文件创建为一个输入流对象
InputStream fis = new FileInputStream("F:\\aa\\test.txt");
//2、在Java中把输入流的字节读取出来
int date;
while ((date=fis.read()) != -1){
System.out.print((char) date);//转为字符型输出
}
}
//一次读取多个字节的方法
public static void demo2() throws IOException {
InputStream fis = new FileInputStream("F:\\test1.txt");
byte[] b = new byte[4];//设置中转站,一次可以读4个字节
int date;
while ((date=fis.read(b))!= -1){
System.out.println(new String(b));//字节数组转为字符串输出
b = new byte[4];//清空中转站
}
}
//一次全部读完的方法
public static void demo3() throws IOException {
InputStream fis = new FileInputStream("F:\\test1.txt");
byte[] b = new byte[fis.available()];//available()方法可以一次获取全部长度
fis.read(b);//把读的内容存入字节数组b中
System.out.println(new String(b));//将字节数组转化为字符串
}
//测试代码
public static void main(String[] args) {
try {
demo1();//调用的方法
} catch (IOException e) {
e.printStackTrace();
}
}
字节输出流(OutputStream)
OutputStream是Java标准库提供的最基本的输出流,位于java.io包里。它不是一个具体的类或者接口,而是一个抽象类。同时它是所有字节输入流的父类。
如何使用字节输出流(OutputStream)
//因为OutputStream是抽象类,所以使用时要引用子类的地址
OutputStream outputStream = new FileOutputStream("F:\\aa.txt",true);//默认false,此时写入会覆盖原有的内容。true是追加,不会覆盖原有内容。
public static void dem() throws IOException {
OutputStream out = new FileOutputStream("F:\\aa.txt",true);
String ss = "天天向上";
byte[] bytes = ss.getBytes();//getBytes()方法把字符串转为字节数组
out.write(bytes);
}
//测试代码
public static void main(String[] args) {
try {
dem();
} catch (IOException e) {
e.printStackTrace();
}
}