当前位置: 首页 > article >正文

Java研学-IO流(一)

一 文件与流—真正存储数据的载体

1 存储关系与类型

文件 – 可以直接操作的数据资源载体

文件夹 – 同时存放一个或多个文件的"容器"

文本文件 – 纯文本:操作的是字符型数据:例如 .java/.txt/.class…

媒体文件 – 既可以包含文本也可以包含其他数据:操作字节型数据:例如: .png/.MP4/.exe…

2 流

① 作用:实现数据资源的移动 – Stream(流)

② 流向:

入 – InputStream流 – System.in

出 – OutputStream流 – System.out.print()

ps:out是OutputStream流的一个子流PrintStream

二 File类

1 含义:操作硬件设备上的文件资源的类,用户在硬件社设备上直接操作文件;而操作文件的这些方法(增删改查判)需要定义在指定的类中,这个类就是File

// 文件和目录路径名的抽象表示
public class File

2 常用方法-创建文件,文件夹

// 在指定路径下实例化File对象
public class Play {
    public static void main(String[] args) {
        // public File(String path)
        // 有盘符的是绝对路径,没有的是相对路径,相对路径会在项目所在文件夹查找(移植不安全)
        // 路径 D:\data\Play.java

        // 通过构造器实例化对象,指定文件创建路径(但此时不会在该路径下创建文件)
        File file=new File("景区名单.txt");
        File file2=new File("File//qq//景区名单1.txt");
        try {
            // 当且仅当路径下不存在该文件,创建并返回true
            if(file.createNewFile()){
                System.out.println("创建文件成功");
            }else {
                // 如果存在,返回false,并且不会重新创建
                System.out.println("文件已经存在");
            }
            // 创建文件夹 成功返回true 失败返回false
            System.out.println("一号"+file.mkdir());
            // 可以创建一层父目录
            System.out.println("二号"+file2.mkdirs());
            // 可以创建多层父目录
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3 删除文件或目录

public class Play {
    public static void main(String[] args) {
File file=new File("景区名单.txt");
        File file2=new File("File//qq//景区名单1.txt");
        try {
            // 当且仅当路径下不存在该文件,创建并返回true
            if(file.createNewFile()){
                System.out.println("创建文件成功");
            }else {
                // 如果存在,返回false,并且不会重新创建
                System.out.println("文件已经存在");
            }
            // 创建文件夹 成功返回true 失败返回false
            System.out.println("一号"+file.mkdir());
            // 可以创建一层父目录
            System.out.println("二号"+file2.mkdirs());
            // 可以创建多层父目录
            
            
            System.out.println(file.delete());
            // 只能删除文件
            file2.deleteOnExit();
            // JVM虚拟机终端结束后再删除
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

4 更改文件名及格式

public class Play {
    public static void main(String[] args) {
        File file=new File("景区名单.txt");
        File file2=new File("File//qq//景区名单1.txt");
        try {
            // 当且仅当路径下不存在该文件,创建并返回true
            if(file.createNewFile()){
                System.out.println("创建文件成功");
            }else {
                // 如果存在,返回false,并且不会重新创建
                System.out.println("文件已经存在");
            }
            // 创建文件夹 成功返回true 失败返回false
            System.out.println("一号"+file.mkdir());
            // 可以创建一层父目录
            System.out.println("二号"+file2.mkdirs());
            // 可以创建多层父目录
            System.out.println(file.renameTo(new File("File//qq//景区名单2.png")));
            // 成功返回true
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

5 查询文件路径

public class Play {
    public static void main(String[] args) {
        File file=new File("景区名单.txt");
        File file2=new File("File//qq");

        try {
            // 当且仅当路径下不存在该文件,创建并返回true
            if(file.createNewFile()){
                System.out.println("创建文件成功");
            }else {
                // 如果存在,返回false,并且不会重新创建
                System.out.println("文件已经存在");
            }
            // 以String类对象的形式显示当前文件的绝对路径,可操作路径
            System.out.println(file.getAbsolutePath());
            // 以File类对象的形式显示当前文件的绝对路径,可直接操作文件本身
            System.out.println(file.getAbsoluteFile());
            System.out.println(file.getName());
            // 获取文件名,路径的最后一个名字,若为空则返回空字符串
            System.out.println(Arrays.toString(file2.listFiles()));
            // 以数组形式返回指定路径下所有文件+文件夹(路径名不表示目录则返回null)
            // [File\qq\景区名单1.txt, File\qq\景区名单2.jpg, File\qq\景区名单2.png]
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

6 判断路径是否为文件夹

public class Play {
    public static void main(String[] args) {
        File file=new File("景区名单.txt");
        File file2=new File("File//qq");

        try {
            // 当且仅当路径下不存在该文件,创建并返回true
            if(file.createNewFile()){
                System.out.println("创建文件成功");
            }else {
                // 如果存在,返回false,并且不会重新创建
                System.out.println("文件已经存在");
            }
            System.out.println(file2.isDirectory());
            // 是返回true,否则返回false
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

7 例子

  指定的文件夹下,获取该路径下的所有指定格式文件

public class Play {
    public static void main(String[] args) {
        Case.show(new File("D:\\Java\\workspace\\untitled\\File"),".png");
        // D:\Java\workspace\untitled\File\qq\景区名单2.png
    }
}
class Case {
    // dir 文件路径 pattern文件后缀(格式)
    public static void show(File dir,String pattern){
        // 获取指定路径下的文件和文件夹
        File[] files=dir.listFiles();
        // 遍历数组获取File对象(直接操作文件)
        for (File f:files) {
            // 判断File对象是否为文件夹
            if(f.isDirectory()){
                // 是文件夹则进行递归
                show(f,pattern);
                // 是文件则判断是否符合格式
            }else if(f.getName().endsWith(pattern)){
                // String格式返回
                System.out.println(f.getAbsolutePath());
            }
        }
    }
}

http://www.kler.cn/news/149435.html

相关文章:

  • Python与设计模式--模板模式
  • 一篇总结 Linux 系统启动的几个汇编指令
  • java springboot测试类鉴定虚拟MVC运行值与预期值是否相同
  • AI模特换装的前端实现
  • 大数据学习(26)-spark SQL核心总结
  • 鸿蒙应用开发之打包与上架
  • 天软高频时序数据仓库
  • Ubuntu系统Springboot项目Nginx安装(编译安装方式)
  • echarts点击事件
  • vue2+el-select实现分页加载更多功能
  • 插入或更新学生信息的 SQL 语句
  • 【问题解决!】OSError: [WinError 1455] 页面文件太小,无法完成操作。Error loading “c:\Anaconda3\lib
  • 在Windows WSL (Linux的Windows子系统)上运行的Ubuntu如何更改主机名
  • 5W2H分析法
  • git分支拉取时,提示冲突
  • SAP_ABAP_基础编程_DESCRIBE FIELD_获取数据对象的属性
  • 2.ORB-SLAM3中如何从二进制文件中加载多地图、关键帧、地图点等数据结构
  • Leetcode 1727. 具有重排的最大子矩阵
  • RPC之GRPC:什么是GRPC、GRPC的优缺点、GRPC使用场景
  • web:NewsCenter
  • 芯片设计中的DFX
  • skywalking告警UI界面有告警信息,webhook接口没有回调,400错误
  • 【100个Cocos实例】完蛋,你看我在刮刮乐中刮到了什么?
  • 【Java基础】-- Java包(package)命名规范
  • 选择更灵活的设计工具:SOLIDWORKS 软件网络版与单机版的比较
  • [C++][原创]VSCode C++怎么让运行的时候弹出cmd窗口,而不是在VSCode调试输出
  • Rust之构建命令行程序(一):接受命令行参数
  • 算法之插入排序及希尔排序(C语言版)
  • C++ day42背包理论基础01 + 滚动数组
  • source: command not found错误的解决方法