day21_IO

news2024/9/29 5:30:43

今日内容

上课同步视频:CuteN饕餮的个人空间_哔哩哔哩_bilibili
同步笔记沐沐霸的博客_CSDN博客-Java2301
零、 复习昨日
一、作业
二、File
三、IO流
四、字节输入&输出流

零、 复习昨日

见晨考

一、作业

见答案

二、File

2.1 介绍

File,通过一个路径代表文件或者文件夹

File类是文件(file)和目录(directory)路径名的抽象表示形式。

说人话: 一个File类代表一个文件或者一个文件夹的路径

特殊之处:

  1. 但是这个路径不一定要真实存在
  2. 路径有分
    1. 绝对路径 (带完整路径,盘符等信息)
    2. 相对路径 (没有盘符,只有文件名等信息,相对于当前项目名下)

2.2 构造方法

  • File(File parent, String child) 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
  • File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
  • File(String parent, String child) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
/**
 * 测试构造方法
 */
private static void testConstructor() {
    // 通过字符串代表文件/文件夹对象
    File file = new File("E:\\a.txt");
    System.out.println(file );


    // 通过父级路径+ 子级路径代表 一个文件/文件夹对象
    File file2 = new File("E:\\A","a.txt"); // E:\A\a.txt
    // 以上这种,比较适合后续做文件上传使用

    String fuPath = "E:\\A";
    File parent = new File(fuPath);
    File file3 = new File(parent, "a.txt"); // E:\A\a.txt
}

2.3方法

创建功能

  • boolean createNewFile() 当且仅当不存在此路径名表示的文件时,创建一个新的空文件。
  • boolean mkdir() 创建此抽象路径名指定的目录/文件夹
  • boolean mkdirs() 创建多层级的文件夹
/**
 * 创建文件/文件夹的方法
 */
private static void testCreate() throws IOException {
    // 通过字符串代表文件对象
    File file = new File("E:\\a.txt");

    // 创建不存在的新文件
    boolean newFile = file.createNewFile( );
    System.out.println("是否创建成功? " + newFile );


    // 创建文件夹,不能使用已经存在的文件对象去调用方法
    File file2 = new File("E:/B");
    boolean mkdir = file2.mkdir( );
    System.out.println("创建文件夹? " + mkdir );

    // 创建多层文件夹
    File file3 = new File("E:\\C\\CC\\CCC");
    boolean mkdir1 = file3.mkdirs( );
    System.out.println("创建多层文件夹? " + mkdir1 );
}

获取功能

  • File getAbsoluteFile()返回此抽象路径名的绝对路径名形式。
  • String getAbsolutePath()返回此抽象路径名的绝对路径名字符串。
  • String getName()返回由此抽象路径名表示的文件或目录的名称。
  • String getPath()将此抽象路径名转换为一个路径名字符串。
  • String[] list()返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。场景: 列出A文件夹下的所有记事本文件 (判断字符串后缀)
  • File[] listFiles()返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
  • long lastModified() 返回此抽象路径名表示的文件最后一次被修改的时间。
  • long length() 返回由此抽象路径名表示的文件的长度。
    /**
     * 测试关于获得内容的方法
     */
    private static void testGet() {
        File file = new File("E:\\a.txt");// 绝对路径

        // 相对路径,相对于当前项目根路径
        File file2 = new File("a.txt");

        // - File getAbsoluteFile()返回此抽象路径名的绝对路径名形式。
        File absoluteFile = file2.getAbsoluteFile( );
        System.out.println(absoluteFile );

        // - String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。
        String absolutePath = file2.getAbsolutePath( );
        System.out.println(absolutePath );

        // - String getName()返回由此抽象路径名表示的文件或目录的名称。
        System.out.println(file.getName() );
        System.out.println(file2.getName() );

        // - String getPath() 获得构造方法中的路径
        System.out.println(file.getPath() );
        System.out.println(file2.getPath() );

        System.out.println("----------------" );
        File aDir = new File("E:\\A");

        // - String[] list()返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。场景: 列出A文件夹下的所有记事本文件 (判断字符串后缀)
        String[] arr = aDir.list( );
        System.out.println(Arrays.toString(arr ) );

        // - File[] listFiles()返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
        File[] files = aDir.listFiles( );
        System.out.println(Arrays.toString(files ) );

        File aFile = new File("E:\\A\\a.txt");
        // - long lastModified() 返回此抽象路径名表示的文件最后一次被修改的时间。
        System.out.println(aFile.lastModified() );
        long l = aFile.lastModified( );
        // 由指定毫秒值创建Date对象
        Date lastModified = new Date(l);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm");
        String format = sdf.format(lastModified);
        System.out.println(format );

        // - long length() 返回由此抽象路径名表示的文件的长度。
        System.out.println( aFile.length());
    }

判断功能

  • boolean exists() 测试此抽象路径名表示的文件或目录是否存在。
  • boolean isDirectory() 测试此抽象路径名表示的文件是否是一个目录。
  • boolean isFile() 测试此抽象路径名表示的文件是否是一个标准文件。
  • boolean isHidden() 测试此抽象路径名指定的文件是否是一个隐藏文件。
   /**
     * 测试判断功能
     */
    private static void testPanduan() throws IOException {
        // - boolean exists() 测试此抽象路径名表示的文件或目录是否存在。
        File file = new File("b.txt");
        // 如果不存在时,创建该文件
        if (!file.exists()) {
            file.createNewFile();
        }

        // - boolean isDirectory() 判断是否是文件夹
        System.out.println(file.isDirectory() );

        // - boolean isFile() 测试此抽象路径名表示的文件是否是一个标准文件。
        System.out.println(file.isFile() );

        // - boolean isHidden() 测试此抽象路径名指定的文件是否是一个隐藏文件。
        System.out.println("是否隐藏? " + file.isHidden() );

        File file1 = new File("E:\\IDEA-WorkSpaceJava2301\\day21");
        String[] list = file1.list( );
        for (String s : list) {
            System.out.println(s );
        }
    }

删除&重命名

  • boolean renameTo(File dest) 重新命名此抽象路径名表示的文件。
  • boolean delete() 删除此抽象路径名表示的文件或目录。
  private static void test() {
        File file = new File("E:\\A");
        // - boolean delete()  删除此抽象路径名表示的文件或目录。
        // 只能删除空文件夹
        boolean delete = file.delete( );
        System.out.println(delete );

        File file1 = new File("E:\\a.txt");
        // - boolean renameTo(File dest)  重新命名此抽象路径名表示的文件。
        // 改后路径与原来一致,就是单纯重命名
        // file1.renameTo(new File("E:\\aaa.txt"));

        // 改后路径与原来不一致,那就是移动并重命名
        file1.renameTo(new File("E:\\B\\aaa.txt"));
    }

2.4 练习

1 设计方法,传入文件路径.列出该文件夹下的所有记事本文件 (单层文件夹)

public static void findTxt(String path){
    File file = new File(path);
    if(!file.exists()) {
        System.out.println("该路径指定的文件不存在!");
        return;
    }
     if(!file.isDirectory()) {
        System.out.println("该路径指定的文件不是文件夹!");
        return;
    }
    String[] nameArr = file.list();
    for(String name : nameArr) {
        if(name.endsWith("txt")) {
            System.out.println("记事本文件: " + name);
        }
    }
}

2 设计方法,传入文件路径.删除该文件夹下的所有文件(只是删文件,不删文件夹)

public static void deleteFile(String path){
    File file = new File(path);
    if(!file.exists()) {
        System.out.println("该路径指定的文件不存在!");
        return;
    }
     if(!file.isDirectory()) {
        System.out.println("该路径指定的文件不是文件夹!");
        return;
    }
    File[] fileArr = file.listFiles();
    for(File f : fileArr) {
        if(f.isFile()) {
           f.delete();
        }
    }
}

ps: 该题可以扩展,给定路径删除该文件夹

三、IO流

流的概念:

在程序中,数据需要传输(移动),⽐如磁盘上的数据需要出现在显⽰器上,就需要进⾏数据传输。 在Java中进⾏数据传输的技术就是“流”.

image-20230227145557596

IO - Input & Output - 输入 & 输出

image-20230227145922695

IO按类型分类

  • 字节流
    • 字节输入流
    • 字节输出流
  • 字符流
    • 字符输入流
    • 字符输出流

IO按方向分类

  • 输入流
  • 输出流

四、字节输入&输出流

字节输入流和字节输出流顶层设计是抽象类

  • InputStream 输入字节流
    • 一般使用其子类FileInputStream
  • OutputStream 输出字节流
    • 一般使用其子类FileOutputStream

4.1 FileInputStream

FileInputStream 用于读取诸如图像数据之类的原始字节流(二进制文件)

构造方法

  • FileInputStream(File file) 通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。

  • FileInputStream(String name) 通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。

        FileInputStream in = new FileInputStream("a2.txt");

        File file = new File("a2.txt");
        FileInputStream in2 = new FileInputStream(file);

方法

  • int read() 一次读取一个字节
  • void close() 关流
   public static void main(String[] args) throws IOException {
        // 以文件创建流
        FileInputStream in = new FileInputStream("a.txt");

        // 开始读取
        // 一次读取一个字节
        // int i1 = in.read();
        // System.out.println((char)i1 );
        //
        // int i2 = in.read( );
        // System.out.println((char)i2 );
        //
        // int i3 = in.read( );
        // System.out.println((char)i3 );
        //
        // // 读到末尾(读完了)返回-1
        // int i4 = in.read( );
        // System.out.println(i4 );

        int r = -1;
        while((r = in.read()) != -1) {
            System.out.println((char)r );
        }

        // 关流,释放资源
        in.close();
    }

read() 一次读一个,有点"慢"
read(byte[] ) 一次读取一个数组大小的数据,比较快

    public static void main(String[] args) throws IOException {
        // 以文件创建流
        FileInputStream in = new FileInputStream("a.txt");

        byte[] bytes = new byte[4];
        System.out.println(Arrays.toString(bytes ) );

        // 可以将元素一次读取到数组中
        in.read(bytes);

        System.out.println(Arrays.toString(bytes ) );
    }

4.2 FileOutputStream

FileOutputStream是文件输出流,用于将数据写入 File
适合用于写入诸如图像数据之类的原始字节的流(二进制)

构造方法

  • FileOutputStream(File file) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
  • FileOutputStream(File file, boolean append) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
  • FileOutputStream(String name) 创建一个向具有指定名称的文件中写入数据的输出文件流。
  • FileOutputStream(String name, boolean append) 创建一个向具有指定 name 的文件中写入数据的输出文件流。

方法

  • void write(int b) 将指定字节写入此文件输出流。
  • void close() 关闭此文件输出流并释放与此流有关的所有系统资源。
    public static void main(String[] args) throws IOException {

        // FileOutputStream fos = new FileOutputStream("a.txt");
        // 构造方法中参数2, boolean append,意思是是否对该文件内容追加写入
        // 指定true,追加内容到原文件
        // 指定false,覆盖原文件内容
        // 不指定的话默认是false

        // 特殊的,写出的文件即使不存在,也会先创建文件再写入
        FileOutputStream fos = new FileOutputStream("c.txt",true);

        // 写一个
        //fos.write(67);

        // 支持一次写多个数据
        byte[] bytes = {65,66,67,68,69};
        fos.write(bytes);

        fos.close();

        System.out.println("写完啦~" );
    }

4.3 使用捕获异常的方式编程

    public static void main(String[] args) {
        FileInputStream in = null;
        try {
            in = new FileInputStream("a.txt");

            int r = -1;
            while((r = in.read()) != -1) {
                System.out.println(r );
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try{
                in.close();
            }catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

4.4 练习: 拷贝图片

将D:\justdoit.jpg图片拷贝一份到E:\jiushigan.jpg

思路: 从d盘读取,写到e盘

    public static void main(String[] args) throws Exception {

        // 将读取转为输入字节流
        FileInputStream in = new FileInputStream("E:\\B\\justdoit.jpg");

        // 将图片写出
        FileOutputStream out = new FileOutputStream("E:\\C\\jiushigan.jpg");

        int r = -1;
        while ((r = in.read()) != -1) {
            out.write(r);
        }

        in.close();
        out.close();

        System.out.println("拷贝完毕" );
    }

改造成trycatch代码再写一遍

五、 总结

file 关于文件操作
  会创建文件对象,创建文件夹/文件,判断文件夹/文件
  
输入/输出字节流
	6行标准代码

会说: 什么是IO, 怎么分类,分别适合场景

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/375463.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Panda Farm:首个部署在 Arbitrum 上的轻量化 GameFi 游戏

在2月16日,Bitget平台宣布 Launchpad 重新启动,并推出了重启后的首个项目 Panda Farm(BBO),该 Launchpad 启动后得到了较高的关注。 Panda Farm 是部署在 Arbitrum 上的 GameFi应用,这可能首先意味着 Bitge…

技术干货 | Modelica建模秘籍之状态变量

在很多领域都有“系统”这个概念,它描述的往往是一些复杂关系的总和。假如我们将系统看做一个黑箱,那么,在系统的作用下,外界的输入有时会产生令人意想不到的输出,“蝴蝶效应”就是其中的典型案例。图1 一只南美洲亚马…

RPC编程:RPC框架设计目标

一:前导知识 Http是超文本传输协议,跨平台性非常好。Http可以传输文本,更多的时候传输的是文本,我们也是可以传输二进制的,我们基于Http进行下载的时候,就是走的Http协议。 Tcp协议,处理的时候…

OpenShift 4 - 使用辅助安装器安装单节点 OpenShift

文章目录单节点 OpenShift 和 OpenShift 辅助安装器单节点 OpenShiftOpenShift 辅助安装器使用辅助安装器安装单节点 OpenShift本文使用的安装环境准备环境在宿主机上安装 KVM 环境创建 SSH 证书根据集群配置,用辅助安装器生成 Discovery ISO用 Discovery ISO 启动 …

SpringBoot整合(五)HikariCP、Druid数据库连接池—多数据源配置

在项目中,数据库连接池基本是必不可少的组件。在目前数据库连接池的选型中,主要是 Druid ,为监控而生的数据库连接池。HikariCP ,号称性能最好的数据库连接池。 在Spring Boot 2.X 版本,默认采用 HikariCP 连接池。而…

黑客入门教程(非常详细)从零基础入门到精通,看完这一篇就够了

这篇文章没有什么套路。就是一套自学理论和方向,具体的需要配合网络黑白去学习。毕竟是有网络才会有黑白! 有自学也有培训! 1.打死也不要相信什么分分钟钟教你成为大黑阔的,各种包教包会的教程,就算打不死也不要去购买那些所谓的…

【C语言每日一题】判断字符串旋转结果(附加字符串左旋详解)

【C语言每日一题】—— 判断字符串旋转结果😎😎😎 目录 💡前言🌞: 💛字符串左旋题目💛 💪 解题思路的分享💪 😊题目源码的分享&#x1…

Aspose.Slides for .NET 授权须知

Aspose.Slides是一款用于生成,管理和转换PowerPoint幻灯片的本机API,可以使用多种格式,而不需要Microsoft PowerPoint。并且可在任何平台上操作PowerPoint演示文稿。 Aspose.Slides for .NET是一款.NET PowerPoint管理API,用于读…

资产设备防拆标签安全防护和资产定位解决方案

随着社会经济的发展和高新技术的日新月异,对各方面的安全要求也在不断地提高,以物联网安防、入侵报警和出入口控制、应急系统等为主的安全防范系统日益成为各类文物场所智能化弱电工程不可或缺的组成部分,是重点资产管理场所内加强管理和安全…

spring源码编译

spring源码编译1、安装gradle2、拉取源码3、配置gradle文件来源及镜像仓库4、预编译5、验证6、可能遇到的报错6.1、jdk.jfr不存在6.2、checkstyleMain6.3、org.gradle.api.artifacts.result.ComponentSelectionReason.getDescription()Ljava/lang/String6.4、其他jdk&#xff1…

做「增长」必须懂的6大关键指标

无论你所从事的是哪个行业,增长都不是一件易事,SaaS公司想要维持长期的增长更是难上加难。这是因为SaaS公司对未来回报的依赖程度更大,反观那些传统商业模式的公司,主要的收入来源都集中在产品购买交付的时点上,而客户…

统计数据资源整理:最全中国2010年人口普查数据Excel文件

很多小伙伴在做数据分析项目时找不到数据,这里分享我从《国家统计局官网》下载的2010年人口普查数据,总共434个Excel文件,全部整理好啦。 数据仅供学习交流使用 获取方法 链接:https://pan.baidu.com/s/1gfXLg5e8hxNeit3IBA17sA…

西电面向对象程序设计核心考点汇总(期末真题)

文章目录前言一、往年真题与答案1.1 改错题1.2 读程题1.3 面向对象程序设计二、易错知识点2.1 构造函数2.2 静态成员变量和静态成员函数2.3 权限2.4 继承2.5 多态总结前言 主要针对西安电子科技大学《面向对象程序设计》的核心考点进行汇总,包含总共8章的核心简答。…

推荐四款自用的电脑神器

作为一个经常鼓捣电脑的小编来说,无论是写文章、截图、办公方面都缺少不了一些好用的软件,今天就给大家盘点一些我推荐用的办公效率工具,让你的效率事半功倍。 写文章神器 以前写文章一直是在公众号编辑上直接写的,缺点就是格式有…

27K测试老鸟分享自己6年面试心得,四种公司、四种问题…

这里总结了下自己今年的面试情况 先说一下自己的个人情况,普通二本计算机专业毕业,懂python,会写脚本,会selenium,会性能。趁着金三银四跳槽季,面试字节跳动测试岗技术面都已经过了,本来以为是…

nodejs环境配置

啥是node.js 简单理解就是js运行环境 啥是npm 简单理解就是nodejs包管理工具,全称Node Package Manager 啥是cnpm npm的开源镜像,在国内使用cnpm替代npm可以起到加速的效果 https://npmmirror.com/ ①安装node.js https://nodejs.org/en/download/ 下载…

新必应(New Bing)国内申请与使用教程

微软的新必应(New Bing)基于GPT4模型,比ChatGPT的GPT3.5模型领先半个世代。并且集成了Edge浏览器的数据资源,功能更加强大。经过不断的踩坑,终于申请到了New Bing的使用权限,且国内网络也能够正常使用&…

{新}【java开发环境安装】完整工作环境安装配置

公司新发了一台红米笔记本,打算用新的笔记本,开启自己新的工作旅程,其中把做过的事都记录一边; 以便实现,听、读、视频图像、讨论、实践、教人的一个学习过程。 一、Java开发环境安装 找到安装包下载;在…

华为OD机试模拟题 用 C++ 实现 - 玩牌高手(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 最多获得的短信条数(2023.Q1)) 文章目录 最近更新的博客使用说明玩牌高手题目输入输出描述示例一输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为…

《数据库系统概论》学习笔记——第六章 关系数据理论

教材为数据库系统概论第五版(王珊) 这一章重点在于各种范式的概念和将低级范式转为高级范式。一定要看多值依赖和4NF(因为这个概念很绕又烦,但是期中期末都考了)。最后计算题就是一定要会:算闭包&#xff0…