IO流 (一) ----- 基本概念和FIle类

相关文章:
  1. 《IO流 (一) ----- 基本概念和File类》
  2. 《IO流 (二) ----- 文件流》
  3. 《IO流 (三) ----- 字符流和字符缓冲流》
  4. 《IO流 (四) ----- 转换流和标准字节输出流》
  5. 《IO流 (五) ----- 对象数据的序列化和反序列化》


本篇涉及内容


  • IO流的基本概念
  • IO流四大家族介绍
  • java.io包下主要的几个流
  • File类详解

IO流基本概念


一、什么是IO流?

 IO流即输入输出流,通过IO流可以完成硬盘文件的读写。

二、IO流的分类
  1. 按照流的方向进行分类——输入流、输出流
     以内存作为参照物,往内存中入叫作输入(Input)、读(Read),从内存中出叫作输出(Output)、写(Write).

  2. 按照读取数据方式的不同进行分类——字节流、字符流

    (1) 字节流,一次读取1个字节byte(8个二进制位)。这种流什么类型的文件都可以读取,包括:图片、音频、视频、文本文件等等…

    (2) 字符流,一次读取一个字符char,这种流是方便读取普通文本而存在的,只能读取普通文本文件,word文件都不能读取。

    例如:在.txt纯文本文件内有"莫莫ab"这段文本

    1. 使用字节流读取:
      第一次读取:1个字节,第一个“莫”的一半字节(中文字符在windows系统中占2个字节)
      第二次读取:1个字节,第一个“莫”的另一半字节
      第三次读取:1个字节,第二个“莫”的一半字节
      第四次读取:1个字节,第二个“莫”的另一半字节
      第五次读取:1个字节,“a”(字母在windows系统中占1个字节)
      第六次读取:1个字节,“b”
    2. 使用字符流读取:
      第一次读取:1个字符,“莫”
      第二次读取:1个字符,”莫“
      第三次读取:1个字符,“a”
      第四次读取:1个字符,“b”

    注意

    1. char基本数据类型在java中占用2个字节,但是一个字母在windows系统中占用1个字节、一个中文字符在windows系统中占用2个字节,使用字节流读取.txt文件中的数据时,是根据在windows系统中.txt文件中数据内存来读取的, 从里面每次读取1个字节到内存中,所以一次只能读取一个字母或者半个中文字符。
    2. 普通文本文件不一定只是.txt文件,能用记事本编辑的文件都属于普通文本文件。


IO流的四大家族


  • java.io.InputStream 字节输入流
  • java.io.OutputStream 字节输出流
  • java.io.Reader 字符输入流
  • java.io.Writer 字符输出流

共同点:

  1. 以上四个类都是抽象类 ,实现了java.io.Closeable接口,都是可关闭的,都有close()方法。流是内存和硬盘之间通道,使用完后一定要关闭,避免造成资源耗费。
  2. 所有的输出流实现了java.io.Flushable接口,都是可刷新的,都有flush()方法。在输出流最终输出完后,一定记得flush()刷新一下,作用是将连接内存和硬盘之间的通道中的数据强行输出完,如果没有flush()可能会丢失数据。

注意:以上四个类都是抽象类,在java中只要类名以"Stream"结尾的都是字节流,以"Reader/Writer"结尾的都是字符流。



java.io包下主要的几个流


  • 文件流:
    java.io.FileInputStream
    java.io.FileOutputStream
    java.io.FileReader
    java.io.FileWriter

  • 转换流:(将字节流转换为字符流)
    java.io.InputStreamReader
    java.io.OutputStreamWriter

  • 缓冲流:
    java.io.BufferedReader
    java.io.BufferedWriter
    java.io.BufferedInputStream
    java.io.BufferedOutputStream

  • 数据流:
    java.io.DataInputStream
    java.io.DataOutputStream

  • 标准输出流:
    java.io.PrintWriter
    java.io.PrintStream

  • 对象流:
    java.io.ObjectInputStream
    java.io.ObjectOutputStream



File类


一、摘要

该类是文件和目录路径名的抽象表示形式

二、文件的绝对路径和相对路径
  1. 绝对路径:C:\Users\yukea\Desktop\JavaProject\Test\FileInputStreamTest.txt"
  2. 相对路径:Test\FileInputStreamTest.txt(IDEA默认的当前路径是project的根下)
三、File类的构造方法
构造方法描述
File(File parent, String child)通过已实例化的父路径File对象和子路径名实例化一个新的File对象
File(String pathname)通过给定的路径名实例化一个File对象
File(String parent, String child)通过给定父路径名和子路径名实例化一个File对象
File(URI uri)通过将给定文件URI转换为抽象路径名来创建新的File实例

父路径:相对于子路径的上一级路径
子路径:相对于父路径的下一级路径


四、File类的常用方法
  1. 新建文件或文件夹需要用到的方法

    返回值方法名及形参描述
    booleanexists()判断文件或者文件夹是否存在
    booleancreateNewFile()在一个已经存在路径文件夹下创建一个新文件,创建成功返回true
    booleanmkdir()在一个已经存在路径文件夹下创建一个新文件夹,创建成功返回true
    booleanmkdirs()创建多级文件夹目录,创建成功返回true
    
         File dir = new File("Test/一级文件夹");
    
         File file = new File(dir, "moMo.txt");
    
         File dirs = new File("Test/一级文件夹/二级文件夹/moMo");
    
         if(!dir.exists() || !file.exists() || !dirs.exists()) {
    
             // 在Test文件夹下创建一个一级文件夹
             dir.mkdir();
    
             // 在一级文件夹下创建一个二级文件夹再在二级文件夹下创建moMo文件夹
             dirs.mkdirs();
    
             // 在一级文件夹下创建一个moMo.txt文件
             file.createNewFile();
         }
         
    
  2. 删除文件或文件夹

    返回值方法名及形参描述
    booleandelete()删除文件或文件夹

    注意:delete的File对象如果是文件夹则该文件夹必须为空,否则会删除失败。

  3. 获取文件名和路径

    返回值方法名及形参描述
    StringgetName()获取文件或文件夹的名称
    StringgetPath()获取创建File对象时传入的路径
    StringgetAbsolutePath()获取文件或文件夹的绝对路径
    FilegetAbsoluteFile()返回文件或文件夹的绝对路径形式的File对象
    StringgetParentPath()获取文件或文件夹的上一级路径
    FilegetParentFile()返回文件或文件夹的上一级路径的File对象
  4. 判断文件属性

    返回值方法名及形参描述
    booleanisFile()判断是不是文件类型
    booleanisDirectory()判断是不是文件夹类型
    booleanexists()判断文件或文件夹是否存在
    booleancanRead()判断文件是否可读取
    booleancanWrite()判断文件是否可写入
    booleancanExecute()判断文件是否为可执行文件
  5. 设置文件属性

    返回值方法名及形参描述
    booleansetReadable(boolean readable)设置文件可读性
    booleansetWritable(boolean writable)设置文件可写入性
    booleansetExecutable(boolean executable)设置文件可执行性
  6. 获取文件属性

    返回值方法名及形参描述
    longlength()获取文件字节大小(b)
    longlastModified()获取文件最后修改时间(1970-01-01 00:00:00 的偏移量)
    File[]listFiles()获取文件夹中的所有文件和子文件夹的File对象,存放到File数组中
    String[]list()获取文件夹中的所有文件和子文件夹的名称,并存放到字符串数组中
  7. 测试

    File file = new File("Test/copyFile/copiedFile2.MOV");
    
    System.out.println("是否是文件:" + file.isFile());
    System.out.println("是否是文件夹:" + file.isDirectory());
    System.out.println("是否可读取:" + file.canRead());
    System.out.println("是否可写入:" + file.canWrite());
    System.out.println("是否可执行:" + file.canExecute());
    System.out.println("该文件大小:" + (double)((file.length() / (1024 * 1024))) + "MB");
    System.out.println("该文件最后修改时间:" + new Date(file.lastModified()));
    System.out.println("该文件的同目录下所有文件名称:" +      Arrays.toString(file.getParentFile().list()));
    
    是否是文件:true
    是否是文件夹:false
    是否可读取:true
    是否可写入:true
    是否可执行:false
    该文件大小:20.0MB
    该文件最后修改时间:Fri Jul 10 18:00:59 CST 2020
    该文件的同目录下所有文件名称:[.DS_Store, Test, copiedFile2.MOV]
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值