主要内容
1. IO体系
2. File类
3. FileInputStream和FileOutputStream
4. FileReader和FileWriter
5. BufferedInputStream和BufferedOutputStream
6. BufferedReader和BufferedWriter
7. DataInputStream和DataOutputStream
8. ObjectInputStream和ObjectOutputStream
9. 序列化和反序列化
10. 其他流
11. 复制文件夹

一、IO流概述
1.1 IO流概述 Input Output Stream
在Java程序中,对于数据的输入/输出操作以“流” (stream) 方式进行;Java提供了各种各样的“流”类,用以获取不同种类的数据;程序中通过标准的方法输入或输出数据。Java的流类型一般位于java.io包中。
数据源data source,提供原始数据的原始媒介。常见的:数据库、文件、其他程序、内存、网络连接、IO设备。
流是一个抽象、动态的概念,是一连串连续动态的数据集合。
数据源就像水箱,流就像水管中流着的水流,程序就是我们最终的用户。 流是一个抽象、动态的概念,是一连串连续动态的数据集合。
1.2 IO流分类
按流的方向分类:
q 输入流:数据流向是数据源到程序(以InputStream、Reader结尾的流)。
q 输出流:数据流向是程序到目的地(以OutPutStream、Writer结尾的流)。
菜鸟雷区
输入/输出流的划分是相对程序而言的,并不是相对数据源。
按处理的数据单元分类:
q 字节流:以字节为单位获取数据,命名上以Stream结尾的流一般是字节流,顶级类InputStream、OutputStream。
q 字符流:以字符为单位获取数据,命名上以Reader/Writer结尾的流一般是字符流,顶级类Reader、Writer。
按处理对象不同分类:
q 节点流:可以直接从数据源或目的地读写数据,如FileInputStream、FileReader等。
q 处理流:不直接连接到数据源或目的地,是”处理流的流”。通过对其他流的处理提高程序的性能,如BufferedInputStream、BufferedReader等。处理流也叫包装流。
节点流处于IO操作的第一线,所有操作必须通过它们进行;处理流可以对节点流进行包装,提高性能或提高程序的灵活性。
生活案例:节点流就好比水井、水库,处理流就好比自来水厂、水塔等,目的是为了过滤和方便。但是如果没有水井、水库,只有自来水厂和水塔肯定不行。
1.3 IO流体系结构
字节流
l InputStream和OutputStream是Java语言中最基本的两个字节输入输出类。其他所有字节输入输出流类都继承自这两个基类。
l 这两个类都是抽象类,不能创建它们的实例,只能使用它们的子类.
l FilterInputStream和FilterOutputStream是所有包装流的父类
分析java中的io流基础
Reader和Writer
l Java语言中最基本的两个字符输入输出类。
l 其他所有字符输入输出流类都继承自这两个基类。
l 这两个类都是抽象类,不能创建它们的实例,只能使用它们的子类.
1.4 File类的使用
File类用来代表文件和文件夹。主要作用有两个:获取文件或者文件夹的属性; 实现对文件、文件夹的创建和删除。 文件夹:file folder 目录:directory
【示例1】使用File获取文件或文件夹属性
public class TestFile1 {
public static void main(String[] args) {
//1.创建一个File对象,指向一个文件或者文件夹
//File file = new File("c:\bjsxt\readme.txt");
//File file = new File("c:/bjsxt/readme.txt");
//File file = new File("readme.txt");
File file = new File("c:/");
//2.使用这个File对象,获取文件或者文件夹的属性
System.out.println(file.getName());//文件或者文件夹的名称
System.out.println(file.length());//长度
System.out.println(file.exists());//是否存在
System.out.println(file.getPath());//
System.out.println(file.getAbsolutePath());//绝对路径
System.out.println(file.isDirectory());//判断file是否指向一个目录
System.out.println(file.isFile());//判断file是否指向一个文件
System.out.println(file.isHidden());
System.out.println(file.canWrite());
System.out.println(file.canRead());
System.out.println(file.canExecute());
//String [] fileNameArr = file.list();
//某个文件夹下有哪些子文件夹和文件
System.out.println("============");
File fileArr[] = file.listFiles();
for(File f :fileArr){
//System.out.println(f.toString());
System.out.print(new Date(f.lastModified()).toLocaleString());
if(f.isFile()){
System.out.print(" "+f.length()+" ");
}else{
System.out.print(" <DIR> ");
}
System.out.println(f.getName());
}
}
}
【示例2】使用File类新建、删除文件和文件夹
public class TestFile2 {
public static void main(String[] args) {
//创建一个File对象
//File file = new File("c:/bjsxt/readme.txt");
File file = new File("c:/bjsxt/abc/cba/acb/bac/readme.txt");
//如果文件存在就删除,如果不存在就创建
if(file.exists()){
file.delete();
}else{
try {
//判断所在文件夹是否存在,不存在,要先创建文件夹
File dir = file.getParentFile();
if(!dir.exists()){
//dir.mkdir();//make directory
dir.mkdirs();
}
//创建文件
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
注意
q File不仅可以指向一个文件,也可以指向一个文件夹(作为一个文件对待)
q File不能对文件的内容进行操作,需要借助IO流实现
本节作业
1. 流有哪些不同的分类。
2. 流的体系结构
3. 使用File类获取文件和文件夹的属性
4. 使用File类新建删除文件和文件夹
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/26162.html