IO的体系
1:IO就是in(输入)和out(输出),指的是应用程序和外部设备之间的数据传递,常见的外部设备包括了文件和管道以及网络连接。
2:流:Stream,它是一个抽象的概念,指一连串的数据(字节或者字符)以先进先出的方式发送信息的通道。
3:流的特性
1)先进先出,最先写入的输出流的数据最先被输入流读取到。
2)顺序存取,可以一个接一个的往流中写入一串字节,读出时也将按照写入的顺序读取一串字节,不能够随机的访问中间的数据(RandomAccessFile除外)。
3)只读或者只写,每个流只能是输入流或者是输出流,只能具有一种功能,不能够同时具备两种功能。输入流只进行读操作,输出流只进行写操作。
IO流的分类
分类图:
IO流的分类方式有三种:
1,按数据流的方向来分:输入流和输出流
输入与输出是相对于内存而言的,读取文件的输入流,写文件是输出流
2,按处理数据的单位(大小)来分:字节流和字符流
字节流和字符流的用完都差不多,区别在于两者的操作单元不同,字节流操作的数据单元是8位的字节,字符流操作的数据单元是16位的字符。
2,按功能来分:节点流和处理流
节点流:直接操作数据读写的流类,例如:FileInputStream
处理流:对一个已存在的流的链接和封装,通过对数据进行处理为程序提供功能强大,灵活的读写功能。例如:BufferedInputStream
文件(File)
File类是用来操作文件的类, 提供一些方法(api)来操纵文件和获取文件的信息,但是他不能够操作文件中的数据。
1.常用的方法:
createNewFile():当且仅当不存在具有此抽象路径名指定名称的文件时,不可分的创建一个新的空文件。
delete():删除创建的文件。
getAbsoluteFile():返回绝对路径名。
getAbsolutePath():返回绝对路径名字符串。
length():返回文件的长度
mkdir():创建此抽象路径名指定的目录。
代码实例:
1.创建或者删除文件…操作
public static void main(String[] args) throws IOException {
//File file = new File("c:\\huhu.test"); //此方式为在windows系统下的创建对象方式(朝右的\)
//File file = new File("c:/huhu.test"); //此方式为在Linux系统下的创建对象方式(朝左的/)
//在不清楚当前的环境下创建文件对象:
File file = new File("D:"+File.separator+"huhu.test");
file.createNewFile(); //文件的创建api
//file.delete(); //文件的删除a
System.out.println(file.isHidden()); //文件是否被隐藏
}
2.查找指定盘符下的文件和文件夹
public static void main(String[] args) {
//找出E盘下的文件和文件夹
File f = new File("E:");
for (File fs : f.listFiles()) {
if (fs.isDirectory()) {
// 文件夹
System.out.println("文件夹:" + fs.getName());
} else {
// 文件
System.out.println("文件:" + fs.getName());
}
}
}
3.找出指定盘符下的所有目录中的文件
/**
* 找出E盘下的所有文件
*/
public static void main(String[] args) {
findFile(new File("E:"));
}
public static void findFile(File f) {
if(f!=null && f.isFile()) {
//路径不为空且是文件时
System.out.println(f.getName()); //打印出f的名称
return;
}
File[] list = f.listFiles();
if(list!=null) {
for(File fs:list ) {
findFile(fs); //利用递归
}
}
}
字节流
字节流的两个基类InputStream和OutputStream是两个抽象类,所有具体的字节流实现类都是分别继承了这两个类。
类的说明:(以InputStream来说明)
1.InputStream:它是所有字节输入流的抽象基类,抽象类不能被实例化,实际上是作为模板而存在的,为了所有实现类定义了处理输入流的方法。
2.FileInputStream:文件输入流,