1、字节流
先了解流的概念
流分为输入流和输出流,一个对象的输入流是指从外界到这个对象的流,输出流则是从这个对象到它的外界的流。
例如:对于一个JAVA程序来说,它是运行在JVM(JAVA虚拟机)中的的,如果它想要从硬盘中读取文件,就要用到它的输入流,JVM通过向操作系统提出请求来获得输入流,以将磁盘中的文件内容传入到程序中。
而写入磁盘或者从磁盘中读取是通过读写字节或者读int型数据实现的。
这种以字节形式读写的流对象成为字节流。
2、缓冲流
操作系统读取在Buffer中读取一定的字节数据之后再传递给JVM,这就是缓冲。
3、数据流
这种流会在画图保存这篇博客中讲到,这里就不说了。
最后奉上字节流和缓冲流的代码:
package ch0801;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class IODemo{
public static void main(String[] args){
//FileIO("src\\ch0801\\write.txt","src\\ch0719\\writeTo.txt"); 这样的路径貌似有问题
FileIO("F:\\test.txt","D:\\writeTo.txt"); //可以运行,通过多次运行可以发现每次写入都会覆盖之前的内容
BufferIO("D:\\writeTo.txt","E:\\writeToo.txt"); //可以运行
}
/*
* 字节流的使用
* path 读取的路径
* newPath 写入的路径
*/
public static void FileIO(String path,String newPath){ //定义为Static不用再对象中调用,使用起来比较方便
try{
//step1.创建输入输出流
FileInputStream fis = new FileInputStream(path);
FileOutputStream fos = new FileOutputStream(newPath);
//step2.创建承载字节内容的字节数组
byte[] array = new byte[fis.available()];//available()用来获取读取内容的大小
//step3.从目标路径读取文件信息
fis.read(array);
//还有另外几种读取写入方式
//方式一.
// int i;
// while((i=fis.read())!=-1){ //如果没有读到最后
// fos.write(i);
// }
//方式二.
// while(fis.available()>0){ //如果还有内容可读取
// i = fis.read();
// fos.write(i);
// }
//step4.将读取到的文件信息写入到指定路径
fos.write(array);
//step5.关闭输入输出流
fis.close();
fos.close();
}catch(Exception e){
e.printStackTrace();//输出堆栈信息
}
}
/*
* 缓冲流
* 缓冲流是什么?首先要清楚我们运行JAVA程序是在JVM中运行的
* 一个在硬盘中读取文件的过程是怎样的?
* 1.JVM向操作系统提出请求
* 2.操作系统读取硬盘中的文件
* 3.操作系统将文件递交给JVM供JAVA程序使用
* 如果操作系统读取一定量的文件后再交给JAVA程序,就使用了缓冲,一般来说,缓冲流的读取速度会比字节流要快
*/
public static void BufferIO(String path,String newPath){
try {
//Step1.创建缓冲输入、输出流对象
FileInputStream fis = new FileInputStream(path);
BufferedInputStream bis = new BufferedInputStream(fis);
FileOutputStream fos = new FileOutputStream(newPath);
BufferedOutputStream bos = new BufferedOutputStream(fos);
//Step2.创建字节数组
byte[] array = new byte[bis.available()];
//Step3.读取并写入
bis.read(array);
bos.write(array);
//Step4.关闭输入输出流
bis.close();
bos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/*
* 数据流的使用
* 具体可以使用于画图板、五子棋的保存
*/
}