1、I/O简介
I/O流:Input output Stream,位于java.io包下,用于处理设备之间的数据传输。
一个流可以理解为一个数据的序列,分为输入和输出两种。输入流表示从一个源读取数据到程序,输出流表示程序向一个目标写数据。简单来说流就是对数据的读写
。
数据流的操作对象是File类,file类是java.io包中唯一代表磁盘文件本身,java是通过file来对磁盘文件进行操作的。
1.1、I/O的分类
-
根据流的方向
输入流:数据源到程序,以InputStream、Reader结尾 输出流:从程序到数据源,以OutPutStream,Writer结尾。
输入和输出是针对程序划分的,而不是数据源,简单来说以程序为中心,往程序读取数据为输入,从程序写往文件为输出。
-
按操作数据单位不同
字节流:主要以字节为单位处理数据,一般以Stream结尾 字符流:主要以字符为单位处理数据,一般以Reader、Writer结尾
-
按流的角色的不同
节点流:可以从一个特定的数据源读写数据 处理流:(也叫包装流)不直接连接到数据源或目的地,而是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能
1.2、I/O体系结构
I/O的类简单可以分为四类:
1、基于字节操作的I/O接口:InputStream和OutputStream
2、基于字符操作的I/O接口:Reader和Writer
3、基于磁盘操作的I/O接口:File
4、基于网络操作的I/O接口:Socket(不在java.io的包内,仅仅是放在一起讨论)
前两组主要是传输数据的格式,后两组是传输数据的方式。
我们常用的java.lang.System是一个系统流:
- System.in:标准输入流,默认设备是键盘。
- System.out:标准输出流,默认设备是控制台。
- System.err:标准错误流,默认设备是控制台。
2、File文件类
java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。它实现了Serializable, Comparable两大接口以便于其对象可序列化和比较。它是Java.io包中唯一代表磁盘文件本身的对象,如需访问文件本身的内容需要借助输入/输出流。
2.1、创建
路径中的每级目录之间用一个路径分隔符隔开(windows和DOS系统默认使用“\”来表示,UNIX和URL使用“/”来表示)。关于这个分割符的问题,File中有一个常量: public static final String separator ,可以根据不同的操作系统动态的提供分割符。
1、File file = new File("文件路径"); //直接通过文件路径创建,路径为null时会抛出NullPointerException
2、File file = new File(String parent, String child); //从父路径名字符串和子路径名字符串创建一个新的File实例。
3、File file = new File(File parent, String child); //从父抽象路径名和子路径名字符串创建一个新的File实例
2.2、提供的操作方法
File file = new File("路径");
操作文件:
1、判断文件是否存在:file.exists(); 返回布尔值
2、创建新文件:file.createNewFile(); 返回布尔值,如果不存在则创建一个空文件,需要try、catch捕捉
3、删除文件:file.delete(); 返回布尔值,如果该文件存在删除返回true,否则返回false
4、获得文件最后修改时间:
Date date = new Date(file.lastModified());
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
simpleDateFormat.format(date);
5、获得文件的大小:file.length();
6、判断是否是一个文件:file.isFile(); 返回布尔值
7、判断是否为隐藏文件:file.isHidden(); 返回布尔值
8、获得文件名:file.getName(); 返回String,带后缀的文件名
9、判断两个对象是否为同一文件:file.equals(file2); 返回布尔值
10、判断文件是否可读:file.canRead(); 返回布尔值
11、判断文件是否可写:file.canWrite(); 返回布尔值
12、判断文件是否可执行:file.canExecute();
13、判断文件的后缀:file.getName().endsWith(".后缀"); 返回布尔值
14、获得文件的路径:
全路径:file.getAbsolutePath(); 返回String,绝对路径,从盘开始
完整路径:file.getPath(); new对象时()内传递的路径
上级文件夹路径:file.getParent();
获取上级文件夹:file.getParentFile(); 返回file对象
操作文件夹
1、创建一层文件夹:file.mkdir(); 路径中最后一层文件夹,前提时前面几次文件夹都存在
2、创建多层文件夹:file.mkdirs(); 路径中没有的文件夹都会创建
3、删除文件夹:file.delete(); 路径中最后一层文件夹
4、获取指定文件夹内的所有文件和文件夹: File[] files = file.listFiles(); 只返回一层,返回file对象
5、获取指定文件夹内的所有文件和文件夹的名:String[] files = filse.list(); 返回字符串数组
6、判断是否为文件夹:file.isDirectory();
7、获得当前文件的父文件:file.getParentFile();