(IO 一)
IO
IO(Input&Output)
- 内存中的数据存储到持久化设备上这个动作 称为输出(写)Output操作。
- 把持久设备上的数据读取到内存中的这个动作称为 输入(读)Input操作。
File类
- 当我们要操作系统的文件和文件夹的时候就需要使用 java.io包中的File类
路径问题
-
构造方法
- File (File parent ,string child) 从父抽象路径名和子路径名字符串创建心得File 实例
- File (String pathname) 通过将给定的路径名字符串转换为抽象路径名来创新的File 实例
- File (String parent ,String child) 从父路径名字符串和子路径名字符串创建新的File 实例
-
创建删除目录和文件
- 创建文件功能File file = new File("d:\\a\\b\\abc.txt"); boolean orSuccess = file.createNewFile();
- 创建过程中如果没有中间目录,系统会报错
- 如果文件已经存在了,那么调用方法后的返回值是 false
- 如果不指定后缀名默认还是创建的文件,不会创建 文件夹
- 对于路径也可以写为d:/a/b/123.txt
- 创建文件夹功能File file = new File("d:/abc/bcd");boolean orSuccess = file.mkdir();
- 只能创建1级文件夹,多级目录会报错
- 如果要创建多层级目录需要使用file.mkdirs();
- 删除文件或者文件夹File file = new File("d:/abc/bcd/a.txt"); boolean orSuccess = file.delete();
- 如果有中间目录删除会失败
- 删除不会放进回收站
- 创建文件功能File file = new File("d:\\a\\b\\abc.txt"); boolean orSuccess = file.createNewFile();
-
File的获取功能
- file.getName() 通过路径的split("/")数组的最后 一个元素
- file.getPath() 得到创建file的路径,创建file时的路 径是什么得到的就是什么
- file.getAbsolutePath() 获取绝对路径,如果是file 中的路径是相对路径,得到的是相对于当前项目的绝对路径
- file.getAbsoluteFile() 返回的是文件
- file.length() 获取的是文件的字节数,long类型
- file.getParent() 得到的是父目录,返回值是String 类型
- file.getParentFile() 得到的是父目录,返回值是 file类型
-
File判断功能
- 判断路径是否存在:File file = new File("d:/abc/bcd/a.txt");boolean exists = file.exists();
- 判断是不是文件夹:File file = new File("d:/abc/bcd");boolean exists = file.isDirectory();
- 判断是否是文件:File file = new File("d:/abc/bcd/a.txt");boolean exists = file.isFile();
-
遍历目录
- 遍历目录File file = new File("d:/Develop/eclipse");String[] list = file.list();返回值是字符串数组
-
- 遍历目录File file = new File("d:/Develop/eclipse");File[] listFiles= file.listFiles();返回值File数组
- 获取磁盘根目录File[] listRoots = File.listRoots();
-
文件过滤器
- 通过设置获取指定的文件类型
- 通过调用file.listFiles(new FileFilter() {}); 创建一个FileFilter的文件过滤器
- 重写抽象方法,当方法返回值是true的时候,添加进数组, 实现文件过滤的功能
- 通过设置获取指定的文件类型
-
-
文件过滤原理
- file.listFiles()每次获取到一个文件或者文件夹 的时候,就会调用对应接口的accept方法,将得到的这 个文件或者文件夹作为参数进行传递
- accept()方法如果返回值是true,就将此文件或者文件 夹放入对应的数组中,所以我们可以用我们的代码进行 控制返回值是true还是false
-
输出流和输入流
-
OutputStream
-
- OutputStream叫做字节输出流,每次操作的是1个字节 (8位),因为计算机中最小的存储单位是字节,所以OutputStream可以写入任何文件。
- OutputStream此抽象类,是表示输出字节流的所有类的超类。操作的数据都是字节,定义了输出字节流的基本共性功能方法。
- write(int b)写入一个字节
- write(byte[] b)写入字节数组
- write(byte[] b, int off, int len)写入字节数 组b,off表示从数组中哪个索引开始写,写多少个长度
- close()关闭对象释放相应资源,有时如果不写close就 会造成文件一直被占用无法删除
-
FileOutputStream
- FileOutputStream类,即文件输出流,是用于将数据写入 File的输出流
写入流程
- 创建FileOutputStream指定输出地 址FileOutputStream fos = new FileOutputStream("d:/a.txt");,此代码还可以帮 助我们创建一个文件
- 如果路径中含有中间目录是无法写成功的
- fos.write(100);将100转换为2进制写入文件,会参照 对应ASCII码表
- 关闭输出流fos.close()
写入方式
- 写入一个字节 fos.write(100);
- 写入一个字节数组byte[] bytes = {65,66,67};fos.write(bytes);
- 写入一个字节数组中的一部分byte[] bytes = {65,66,67};fos.write(bytes,0,2);
- 如果要写入一个字符串,可以通过字符串调用"大家 好".getBytes()方式将字符串转换为一个字节数组的 方式
- 如果需要多次写入并且进行换行操作的话,需要添 加\r\n,因为在windows中默认的换行符\r\n
- 如果需要每次写入内容是在当前文件的末尾添加,而不 是进行覆盖,就需要创建FileOutputStream的时候使 用FileOutputStream fos = new FileOutputStream("d:/a.txt",true);
InputStream
InputStream叫做字节输入流,每次操作的是1个字节(8 位),因为计算机中最小的存储单位是字节,所以 InputStream可以读取任何文件
InputStream此抽象类,是表示输入字节流的所有类的 超类。操作的数据都是字节,定义了读取字节流的基 本共性功能方法
- int read():读取一个字节并返回,没有字节返回1.
- int read(byte[]): 读取一定量的字节数,并存储到 字节数组中,返回读取到的字节数。
- void close():关闭输入流
FileInputStream
即文件输入流,是用于将数据读取 到程序的输入流。
-
构造方法
-
读取方式
- 读取单个字节
read的返回值代表读取的内容 文件末尾的值为1 - 读取到字节数组
read的返回值代表读取到了多少个有效字节 读取的内容放在byte中
- 读取单个字节
-