• 文件操作及IO


    目录

    一、文件的分类

    二、文件路径

    三、File 常见方法

            1、get 相关方法使用

    2、文件的创建和删除

    3、遍历目录下所有文件

    四、文件读


    一、文件的分类

    站在程序员的角度,文件通常可以分为两类:

    1. 文本文件:以字符形式存储
    2. 二进制文件:以字节方式存储

    有的朋友可能有疑惑:字符不也是由字节构成的吗?

    是的,文本文件中的字符的确是由一个个相邻的字符构成的,但这些相邻的字节之间是存在关系的,而二进制文件里面存储的字节毫无关系!!

    二、文件路径

    文件路径通常可以分为两类:

    1. 绝对路径(绝对路径 (absolute path) : 以一个盘符开头的路径,就是绝对路径)
    2. 相对路径(相对路径 (relative path) 一般是以.或者..开头的路径.一般会有一个基准,去找对应的路径)

    三、File 常见方法

    Java 中通过 java.io.File 类来对一个文件(包括目录)进行抽象的描述

    File 属性:

    修饰符及类型属性说明
    static StringpathSeparator依赖于系统的路径分隔符,String 类型的表示
    static charpathSeparator依赖于系统的路径分隔符,char 类型的表示

    构造方法:

    签名说明
    File(File parent, Stringchild)根据父目录 + 孩子文件路径,创建一个新的 File 实例
    File(String pathname)根据文件路径创建一个新的 File 实例,路径可以是绝对路径或者相对路径
    File(String parent, Stringchild)根据父目录 + 孩子文件路径,创建一个新的 File 实例,父目录用路径表示

     方法:

    方法签名说明
    String getParent()返回 File 对象的父目录文件路径
    String getName()返回 FIle 对象的纯文件名称
    String getPath()返回 File 对象的文件路径
    String getAbsolutePath()返回 File 对象的绝对路径
    String getCanonicalPath()返回 File 对象的修饰过的绝对路径
    boolean exists()判断 File 对象描述的文件是否真实存在
    boolean isDirectory()判断 File 对象代表的文件是否是一个目录
    boolean isFile()判断 File 对象代表的文件是否是一个普通文件
    boolean createNewFile()根据 File 对象,自动创建一个空文件。成功创建后返回 true
    boolean delete()根据 File 对象,删除该文件。成功删除后返回 true
    void deleteOnExit()根据 File 对象,标注文件将被删除,删除动作会到JVM 运行结束时才会进行
    String[] list()返回 File 对象代表的目录下的所有文件名
    File[] listFiles()返回 File 对象代表的目录下的所有文件,以 File 对象表示
    boolean mkdir()创建 File 对象代表的目录
    boolean mkdirs()创建 File 对象代表的目录,如果必要,会创建中间目录
    boolean renameTo(File dest)进行文件改名,也可以视为我们平时的剪切、粘贴操作
    boolean canRead()判断用户是否对文件有可读权限
    boolean canWrite()判断用户是否对文件有可写权限

    小练习:

    1、get 相关方法使用

    1. package com;
    2. import java.io.File;
    3. import java.io.IOException;
    4. public class Demo {
    5. public static void main(String[] args) throws IOException {
    6. File file = new File("./test.txt");
    7. // file 里边的路径是可以不存在的哦~~~
    8. System.out.println(file.getName());
    9. System.out.println(file.getAbsolutePath());
    10. System.out.println(file.getPath());
    11. System.out.println(file.getCanonicalPath());
    12. }
    13. }

    运行截图:

     

    2、文件的创建和删除

    1. import java.io.File;
    2. import java.io.IOException;
    3. public class FileDemo2 {
    4. public static void main(String[] args) throws IOException {
    5. File file = new File("./test.txt");
    6. System.out.println("创建前:");
    7. System.out.println("文件是否真实存在: "+file.exists());
    8. System.out.println("文件是否是一个目录: "+file.isDirectory());
    9. System.out.println("文件是否是一个普通文件: "+file.isFile());
    10. System.out.println("创建后:");
    11. System.out.println("文件创建是否成功: "+file.createNewFile());
    12. System.out.println("文件是否真实存在: "+file.exists());
    13. System.out.println("文件是否是一个目录: "+file.isDirectory());
    14. System.out.println("文件是否是一个普通文件: "+file.isFile());
    15. System.out.println("再次创建:");
    16. System.out.println("文件创建是否成功: "+file.createNewFile());
    17. }
    18. }

     

    3、遍历目录下所有文件

    1. import java.io.File;
    2. import java.util.ArrayList;
    3. import java.util.List;
    4. public class FileDemo9 {
    5. // 这里的result 用来记录每一个目录里面的路径
    6. public static List result = new ArrayList<>();
    7. public static void getAllFiles(String basePath){
    8. File file = new File(basePath);
    9. if(file.isFile()){
    10. //如果是一个文件就之间add
    11. result.add(basePath);
    12. return ;
    13. }else if (file.isDirectory()){
    14. //这里是一个目录 就需要递归
    15. String[] files = file.list();
    16. for (String f : files){
    17. getAllFiles(basePath+"/"+f);
    18. }
    19. }else{
    20. //非普通文件,暂不考虑
    21. }
    22. }
    23. public static void main(String[] args) {
    24. getAllFiles(".");
    25. for (String s : result){
    26. System.out.println(s);
    27. }
    28. }
    29. }

    四、文件读写

     对文件的读写根据文件的类型大体可以分为两种:

    • 字节流:针对二进制文件,以字节为单位进行读写
    • 字符流:针对文本文件,以字符为单位进行读写

    InputStream 读取:

    方法说明
    int read()读取一个字节的数据,返回 -1 代表已经完全读完了
    int read(byte[] b)最多读取 b.length 字节的数据到 b 中,返回实际读到的数量;-1 代表以及读完了
    int read(byte[] b,int off, int len)最多读取 len - off 字节的数据到 b 中,放在从 off 开始,返回实际读到的数量;-1 代表以及读完了
    void close()关闭字节流

    InputStream是一个抽象类.可用使用FileInputStream来实现. 

    FileInputStream 的构造方法

    构造方法说明
    FileInputStream(File file)利用 File 构造文件输入流
    FileInputStream(String name)利用文件路径构造文件输入流

    OutputStream 写入:

    方法说明
    void write(int b)写入要给字节的数据
    void write(byte[] b)将 b 这个字符数组中的数据全部写入 os 中
    int write(byte[] b, int off,int len)将 b 这个字符数组中从 off 开始的数据写入 os 中,一共写 len 个
    void close()关闭字节流
    void flush()重要:我们知道 I/O 的速度是很慢的,所以,大多的 OutputStream 为了减少设备操作的次数,在写数据的时候都会将数据先暂时写入内存的一个指定区域里,直到该区域满了或者其他指定条件时才真正将数据写入设备中,这个区域一般称为缓冲区。但造成一个结果,就是我们写的数据,很可能会遗留一部分在缓冲区中。需要在最后或者合适的位置,调用

     OutputStream 也是一个抽象类,可以使用FileOutputStream来实现

  • 相关阅读:
    【YOLO】YOLO简介
    渲染噪点多怎么解决?渲染噪点多的原因及处理方法
    Ubuntu配置Samba服务
    shell脚本命令
    Golang语法控制初识
    VMware 陈铁军:VMware的WebAssembly探索初体验
    强化学习论文分析3---蜂窝网络联合频谱和功率分配的深度强化学习--《Deep Reinforcement Learning for ......》
    通过bat命令启动jar后缀软件
    win11开机动画关闭教程
    DNS(域名解析系统)工作过程
  • 原文地址:https://blog.csdn.net/qq_59539549/article/details/128173179