(IO 一)

IO

IO(Input&Output)

  1. 内存中的数据存储到持久化设备上这个动作 称为输出(写)Output操作。
  2. 把持久设备上的数据读取到内存中的这个动作称为 输入(读)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.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的输出流

写入流程

  1. 创建FileOutputStream指定输出地 址FileOutputStream fos = new FileOutputStream("d:/a.txt");,此代码还可以帮 助我们创建一个文件
  2. 如果路径中含有中间目录是无法写成功的
  3. fos.write(100);将100转换为2进制写入文件,会参照 对应ASCII码表
  4. 关闭输出流fos.close()

写入方式

  • 写入一个字节 fos.write(100);
  • 写入一个字节数组byte[] bytes = {65,66,67};fos.write(bytes);
  • 写入一个字节数组中的一部分byte[] bytes = {65,66,67};fos.write(bytes,0,2);
  • 如果要写入一个字符串,可以通过字符串调用"大家 好".getBytes()方式将字符串转换为一个字节数组的 方式
  • 如果需要多次写入并且进行换行操作的话,需要添 加 ,因为在windows中默认的换行符
  • 如果需要每次写入内容是在当前文件的末尾添加,而不 是进行覆盖,就需要创建FileOutputStream的时候使 用FileOutputStream fos = new FileOutputStream("d:/a.txt",true);

InputStream

  InputStream叫做字节输入流,每次操作的是1个字节(8 位),因为计算机中最小的存储单位是字节,所以 InputStream可以读取任何文件  

  InputStream此抽象类,是表示输入字节流的所有类的 超类。操作的数据都是字节,定义了读取字节流的基 本共性功能方法

  1. int read():读取一个字节并返回,没有字节返回­1.
  2. int read(byte[]): 读取一定量的字节数,并存储到 字节数组中,返回读取到的字节数。
  3. void close():关闭输入流

FileInputStream

  即文件输入流,是用于将数据读取 到程序的输入流。

  • 构造方法

    • 读取方式

      • 读取单个字节
        read的返回值代表读取的内容   文件末尾的值为­1
      • 读取到字节数组
        read的返回值代表读取到了多少个有效字节   读取的内容放在byte中

      

原文地址:https://www.cnblogs.com/ZhuX-H/p/13479720.html