相关文章:
  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. 新建文件或文件夹需要用到的方法

    返回值 方法名及形参 描述
    boolean exists() 判断文件或者文件夹是否存在
    boolean createNewFile() 在一个已经存在路径文件夹下创建一个新文件,创建成功返回true
    boolean mkdir() 在一个已经存在路径文件夹下创建一个新文件夹,创建成功返回true
    boolean mkdirs() 创建多级文件夹目录,创建成功返回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. 删除文件或文件夹

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

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

  3. 获取文件名和路径

    返回值 方法名及形参 描述
    String getName() 获取文件或文件夹的名称
    String getPath() 获取创建File对象时传入的路径
    String getAbsolutePath() 获取文件或文件夹的绝对路径
    File getAbsoluteFile() 返回文件或文件夹的绝对路径形式的File对象
    String getParentPath() 获取文件或文件夹的上一级路径
    File getParentFile() 返回文件或文件夹的上一级路径的File对象
  4. 判断文件属性

    返回值 方法名及形参 描述
    boolean isFile() 判断是不是文件类型
    boolean isDirectory() 判断是不是文件夹类型
    boolean exists() 判断文件或文件夹是否存在
    boolean canRead() 判断文件是否可读取
    boolean canWrite() 判断文件是否可写入
    boolean canExecute() 判断文件是否为可执行文件
  5. 设置文件属性

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

    返回值 方法名及形参 描述
    long length() 获取文件字节大小(b)
    long lastModified() 获取文件最后修改时间(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]
    

IO流 (一) ----- 基本概念和FIle类相关推荐

  1. Java IO流学习总结二:File

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54581478 本文出自[赵彦军的博客] Java IO流学习总结一:输入输出流 J ...

  2. java体系的四大基类_Java中的io流学习(了解四大基类和基本步骤)

    Java中io流四大基类及io流操作四大基本步骤 io流:(input/output)即输入输出流.面向对象的思想之一是面向接口编程,面向父类编程,也就是多态.所以学好基类(父类)很重要. 分类 按处 ...

  3. JavaSE---IO流基础(异常、File类、递归)

    6.IO流基础 6.1 异常 6.1.1 异常的概述 异常:就是程序在运行时出现不正常情况. 在Java中,将异常封装成了一个类:Throwable.Throwable下分为两大体系:Error和Ex ...

  4. IO流和集合的交集Properties类的介绍。

    Properties类继承了Hashtable,Hashtable实现了Map<K,V>接口.该类的键值对 都是字符串. Properties的构造方法:Properties pro = ...

  5. IO流(八)之InputStreamReader类与OutputStreamWriter类

    InputStreamReader类与OutputStreamWriter类是字节流通向字符流的桥梁,使用指定charset读写字节并解码为字符. 1.InputStreamReader类 1.1构造 ...

  6. IO流(六)之CharArrayReader类与CharArrayWriter类

    CharArrayReader类与CharArrayWriter类分别是字符数组输入流和字符数组输出流类.用来进行字符数组输入输出操作. 1.CharArrayReader类 1.1构造器 CharA ...

  7. IO流 (四) ----- 转换流和标准字节输出流

    相关文章: <IO流 (一) ----- 基本概念和File类> <IO流 (二) ----- 文件流> <IO流 (三) ----- 字符流和字符缓冲流> < ...

  8. IO流 (三) ----- 字符流和字符缓冲流

    相关文章: <IO流 (一) ----- 基本概念和File类> <IO流 (二) ----- 文件流> <IO流 (三) ----- 字符流和字符缓冲流> < ...

  9. IO流 (二) ----- 文件流

    相关文章: <IO流 (一) ----- 基本概念和File类> <IO流 (二) ----- 文件流> <IO流 (三) ----- 字符流和字符缓冲流> < ...

最新文章

  1. 最新汇总!这些高校已确定开学时间!
  2. [转载] 百科全说——何裕民:性格影响疾病(10-12-20)
  3. 浅谈模型压缩之量化、剪枝、权重共享
  4. 算法--微软面试题:求一个整数数组元素间最小差值
  5. 从0到1,你的导流姿势真的正确吗?
  6. 每天一道LeetCode-----分糖果问题
  7. 覆盖php配置文件,配置 – 用另一个文件覆盖php-fpm池配置值
  8. python线程的互斥锁
  9. Memory Translation and Segmentation(内存转换与段)
  10. ajax页面载入动画,添加加载动画,jQuery的AJAX .load()
  11. NSUserDefaults使用
  12. 芯原的神经网络处理器IP获百余款人工智能芯片采用
  13. 项目管理-PMP-第4章 项目范围管理
  14. 旅行计划 c++_设计旅行计划器
  15. uniapp js 金额与星星**符号互转
  16. 意识的世界之视觉意识
  17. NSFC 申请不中的反思 (内部讨论)
  18. 如何选择适合自己业务的服务器配置
  19. CentOS下连VisualSVN服务器 (windows的svn服务器)
  20. 答题软件对于私人来说安全吗?

热门文章

  1. java基础问题集锦一
  2. 【自】数据库系统原理(三)——测试总结后,
  3. 有关objc中的单例
  4. JVM的内存管理 Ⅰ
  5. 【Vue.js 知识量化】ES6 语法积累
  6. 【恋上数据结构】复杂度知识以及LeetCode刷题指南
  7. 数据结构与算法学习笔记01-数组
  8. [转]2020 年最具潜力 44 个顶级开源项目,涵盖 11 类 AI 学习框架、平台(值得收藏)
  9. [转]python3_unboundlocalerror报错原因
  10. 运算除法的计算机函数,2、Python基础--除法、常用数学函数(示例代码)