java中的I/O(8个案例+代码+效果图)

news2024/12/25 0:03:35

目录

1.File类

1)常用构造方法

1)File(String pathname)

2)File(String parent, String child)

3)File(File parent, String child)

2)常用方法

1)boolean canRead()

2)boolean canWrite()

3)boolean createNewFile() throws IOException

4)boolean delete()

5)boolean exists()

6)String getName()

7)String getPath()

8)boolean isDirectory()

9)boolean isFile()

10)long length()

11)String[] list()

12)File[] listFiles()

13)boolean mkdir()

14)boolean renameTo(File dest)

3)案例:File类的简单使用

1.代码

2.效果

4)遍历目录下的文件

1.代码

2.效果

5)遍历遍历文件以及文件夹下的所有文件

1.代码

2.效果

2.字节流

1)InputStream

1)int read()

2)int read(byte[] b)

3)void close()

2)OutputStream

1)void write(int b)

2)void write(byte[] b)

3)void flush()

4)void close()

3)案例:文件读取

1.代码

2.效果

 4)案例:文件写入

1.代码

2.效果

5)案例:文件的复制

1.代码

2.效果​编辑

3.字符流

Reader

1)int read()

2)int read(char[] cbuf)

3)void close()

Writer

1)void write(int c)

2)void write(char[] cbuf)

3)void write(String str)

4)void flush()

5)void close()

6)案例:字符流的读取

1.代码

2.效果

​编辑 7)案例:简易记事本

1.代码

2.效果


1.File类

1)常用构造方法

  1. 1)File(String pathname)

    • 通过将给定的路径名字符串转换为抽象路径名来创建一个新的 File 实例
    • 参数:pathname - 一个路径名字符串。
  2. 2)File(String parent, String child)

    • 根据父路径名字符串和子路径名字符串创建一个新的 File 实例。
    • 参数:
      • parent - 父路径名字符串。
      • child - 子路径名字符串。
  3. 3)File(File parent, String child)

    • 根据父抽象路径名和子路径名字符串创建一个新的 File 实例。
    • 参数:
      • parent - 抽象路径名作为此路径名的前缀。
      • child - 字符串作为此路径名的更多名称。

2)常用方法

  1. 1)boolean canRead()

    • 测试应用程序是否可以读取该文件
    • 返回值:如果文件可读,则返回 true
  2. 2)boolean canWrite()

    • 测试应用程序是否可以修改该文件
    • 返回值:如果文件可写,则返回 true
  3. 3)boolean createNewFile() throws IOException

    • 当且仅当不存在具有此抽象路径名指定名称的文件时,原子地创建一个由该抽象路径名命名的新空文件。
    • 返回值:如果操作成功则返回 true;如果已经存在这样的文件,则返回 false
    • 异常:可能抛出 IOException
  4. 4)boolean delete()

    • 删除由此抽象路径名表示的文件或目录
    • 返回值:如果成功删除了文件或目录,则返回 true;否则返回 false
  5. 5)boolean exists()

    • 测试此抽象路径名表示的文件或目录是否存在
    • 返回值:如果文件或目录存在,则返回 true
  6. 6)String getName()

    • 返回由此抽象路径名表示的文件或目录的名称
    • 返回值:此抽象路径名表示的文件或目录的名称。
  7. 7)String getPath()

    • 将此抽象路径名转换为路径名字符串
    • 返回值:表示此抽象路径名的路径名字符串。
  8. 8)boolean isDirectory()

    • 测试此抽象路径名表示的文件是否是一个目录
    • 返回值:如果此抽象路径名表示的文件是一个目录,则返回 true
  9. 9)boolean isFile()

    • 测试此抽象路径名表示的文件是否是一个标准文件
    • 返回值:如果此抽象路径名表示的文件是一个标准文件,则返回 true
  10. 10)long length()

    • 返回由此抽象路径名表示的文件的长度
    • 返回值:此抽象路径名表示的文件的长度(以字节为单位),如果文件不存在,则返回 0L
  11. 11)String[] list()

    • 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录
    • 返回值:指定目录中文件和目录名称的字符串数组,如果此抽象路径名不表示一个目录,或者发生 I/O 错误,则返回 null
  12. 12)File[] listFiles()

    • 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件
    • 返回值:表示目录中文件的抽象路径名数组,如果此抽象路径名不表示一个目录,或者发生了 I/O 错误,则返回 null
  13. 13)boolean mkdir()

    • 创建由此抽象路径名命名的目录
    • 返回值:如果已成功创建目录,则返回 true;如果由于父路径不存在等原因而无法创建目录,则返回 false
  14. 14)boolean renameTo(File dest)

    • 重新命名此抽象路径名表示的文件
    • 参数:dest - 新的抽象路径名。
    • 返回值:如果重命名成功,则返回 true;否则返回 false

3)案例:File类的简单使用

1.代码

package org.xiji.javaio;

import java.io.File;
import java.io.IOException;

public class FileOne {
    public static void main(String[] args) throws IOException {
        //创建一个文件对象
        File file = new File("D:\\myFirst\\myTxt.txt");

        System.out.println("文件是否存在:"+file.exists());
        //创建这个是创建的目录
        File file1 = new File("D:\\myFirst");
        file1.mkdir();
        System.out.println("文件是否存在:"+file.exists());

        //创建文件
        boolean newFile = file.createNewFile();
        System.out.println("文件是否创建成功:"+newFile);

        System.out.println("文件是否是绝对路径:"+file.isAbsolute());
        System.out.println("文件是否是目录:"+file.isDirectory());
        System.out.println("文件是否是文件:"+file.isFile());
        System.out.println("文件是否可读:"+file.canRead());
        System.out.println("文件是否可写:"+file.canWrite());
        System.out.println("文件是否隐藏:"+file.isHidden());
        System.out.println("文件大小:"+file.length());
        System.out.println("文件最后修改时间:"+file.lastModified());
        System.out.println("文件名:"+file.getName());
        System.out.println("文件路径:"+file.getPath());
        System.out.println("文件绝对路径:"+file.getAbsolutePath());
        System.out.println("文件父路径:"+file.getParent());
        System.out.println("文件是否是临时文件:"+file.isHidden());

    }
}

2.效果

4)遍历目录下的文件

1.代码
package org.xiji.javaio;

import java.io.File;

public class FileFor {

    public static void main(String[] args) {
        //遍历某个文件夹下的文件
        String path = "D:\\myFirst";

        File file = new File(path);

        File[] files = file.listFiles();

        for (File file1 : files) {
            System.out.println(file1.getName());
        }
    }
}

2.效果

5)遍历遍历文件以及文件夹下的所有文件

1.代码
package org.xiji.javaio;

import java.io.File;

public class FileForTwo {

    public static void main(String[] args)
    {
        //递归遍历
        String path = "D:\\myFirst";
        File file = new File(path);

        myListFiles(file);




    }

    //文件递归遍历
    public static void myListFiles(File file)
    {
        File[] files = file.listFiles();
        //判断文件是否为空
        if(files == null)
        {
            return;
        }
        //遍历
        for (File file1 : files) {
            //判断是否为文件夹,是文件夹就继续遍历,不是就输出名字
            if(file1.isDirectory())
            {
                myListFiles(file1);
            }

            System.out.println(file1.getName());

        }
    }
}

2.效果

2.字节流

字节流用于读写二进制数据。Java中的字节流主要基于InputStreamOutputStream抽象类。

  • 1)InputStream

  • 这是所有字节输入流的超类。它定义了从源读取数据的基本方法。

    • 1)int read()

    • 从输入流中读取下一个字节的数据。返回值范围是0到255。如果已经到达流的末尾,则返回-1。
    • 2)int read(byte[] b)

    • 尝试从流中读取一定数量的字节,并将其存储在参数b指定的缓冲区中。返回实际读取的字节数;如果到达流的末尾,则返回-1。
    • 3)void close()

    • 关闭该流并释放与之关联的所有系统资源。
  • 2)OutputStream

  • 这是所有字节输出流的超类。它定义了将数据写入目标的基本方法。

    • 1)void write(int b)

    • 将指定的字节写入此输出流。
    • 2)void write(byte[] b)

    • 将b.length个字节从指定的字节数组写入此输出流。
    • 3)void flush()

    • 刷新该流的缓冲区。
    • 4)void close()

    • 关闭此输出流并释放与此流相关的任何系统资源。

具体实现类如FileInputStreamFileOutputStream等提供了文件相关的读写功能。

3)案例:文件读取

1.代码
package org.xiji.javaio;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class FileInput {
    public static void main(String[] args) throws IOException {

        //读取文件
        String path = "D:\\myFirst\\myTxt.txt";

        //文件读取流
        FileInputStream fis = new FileInputStream(path);
        int readInfo = 0;

        //读取文件
        while (true) {

            readInfo = fis.read();
            if (readInfo == -1) {
                break;
            }
            System.out.println(readInfo);

        }
        System.out.println("可以看到读取的内容是一些数组,不是文件中的字符串");
    }
}

2.效果

 4)案例:文件写入

1.代码
package org.xiji.javaio;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutPut {
    public static void main(String[] args) throws IOException {

        String containInfo = "这是我通过这些输入到文件中的内容";
        FileOutputStream myOutputStream = new FileOutputStream("D:\\myFirst\\myOutputStream.txt");

        try {
            //转化为数组并且写入
            myOutputStream.write(containInfo.getBytes());

            System.out.println("写入完成");
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            myOutputStream.close();
        }

    }
}

2.效果

5)案例:文件的复制

1.代码
package org.xiji.javaio;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class MyCopy {
    public static void main(String[] args) throws IOException {
        System.out.println("文件的复制");

        //文件读取流
        FileInputStream fileInputStream = new FileInputStream("D:\\myFirst\\myTxt.txt");


        //文件输出流
        FileOutputStream fileOutput = new FileOutputStream("D:\\myFirst\\myTxtCopy.txt");

        //缓冲变量
        int len = 0;

        //定义每次读取长度1024

        byte[] bytes = new byte[1024];
        while ( (len =fileInputStream.read(bytes)) !=  -1 ) {

            //文件读取
            fileOutput.write(bytes,0,len);
        }
        fileInputStream.close();
        System.out.println("复制完成");
    }
}

2.效果

 

3.字符流

字符流用于读写字符文本。它们以Unicode编码形式处理数据。Java中的字符流主要基于ReaderWriter抽象类。

  • Reader

  • 这是所有字符输入流的超类。

    • 1)int read()

    • 读取单个字符。
    • 2)int read(char[] cbuf)

    • 尝试读取多个字符并将它们存放到数组cbuf中。
    • 3)void close()

    • 关闭流。
  • Writer

  • 这是所有字符输出流的超类。

    • 1)void write(int c)

    • 写入单个字符。
    • 2)void write(char[] cbuf)

    • 写入一个字符数组。
    • 3)void write(String str)

    • 写入一个字符串。
    • 4)void flush()

    • 刷新流。
    • 5)void close()

    • 关闭流。

具体实现类如FileReaderFileWriter等提供了文件相关的读写功能。

6)案例:字符流的读取

1.代码

package org.xiji.javaio;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class MyReaderFile {
    public static void main(String[] args) throws IOException {
        //文件字符读取流
        FileReader fr = new FileReader("D:\\myFirst\\myTxt.txt");

        int read = 0;
        
        //文件读取
        while (true) {

            read = fr.read();
            if (read == -1) {
                break;
            }
            System.out.println((char) read);

        }
    }
}

2.效果

可以看到每次读取的都是一个字符,而不是像FileInputStream读取的一样是乱码        

 7)案例:简易记事本

1.代码
package org.xiji.javaio;

import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

public class MyNotePad {
    public static void main(String[] args) throws IOException {

        // 文件路径
        String path = "D:\\myFirst\\";

        Scanner sc = new Scanner(System.in);

        while (true) {
            System.out.println("输入1继续添加内容");
            System.out.println("输入2退出");

            if (sc.nextInt() == 2) {
                break;
            }
            System.out.println("输入记事本名字:");
            String myTxtName = sc.next();


            FileWriter fw = new FileWriter(path+myTxtName+".txt");
            //文件内容
            System.out.println("输入记事本内容:");
            String myContain = sc.next();
            fw.write(myContain);

            fw.close();
        }
    }
}

2.效果

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

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

相关文章

诺奖现场采访2024物理学得主Hinton:当前AI革命堪比工业革命,且将在智力上全面超越人类

当地时间昨天,2024年10月8日,瑞典皇家科学院宣布将本年度诺贝尔物理学奖授予两位被誉为AI教父的科学家:约翰J霍普菲尔德(John J. Hopfield)和杰弗里E辛顿(Geoffrey E. Hinton)。该奖项旨在表彰他…

Leetcode 买卖股票的最佳时机

这段代码的目的是解决“买卖股票的最佳时机”这个问题,即在给定的股票价格数组中,找到一次买入和卖出所能获得的最大利润。 算法思想: 定义两个变量: minPrice: 这个变量用于记录迄今为止遇到的最小股票价格(买入价格…

软件项目必须进行验收测试吗?专业验收测试报告如何获取?

软件项目验收测试是一种关键的质量保证活动,旨在确保软件产品符合用户需求和预期功能。它通常是在软件开发完成后,由客户或第三方测试机构进行的最终测试环节。验收测试的目的是确认软件的性能、功能、安全性和其他特性,以确保交付的产品能够…

【开源免费】基于SpringBoot+Vue.JS医院电子病历管理系统(JAVA毕业设计)

本文项目编号 T 008 ,文末自助获取源码 \color{red}{T008,文末自助获取源码} T008,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 医…

5G NR UE初始接入信令流程

文章目录 5G NR UE初始接入信令流程 5G NR UE初始接入信令流程 用户设备向gNB-DU发送RRCSetupRequest消息。gNB-DU 包含 RRC 消息,如果 UE 被接纳,则在 INITIAL UL RRC MESSAGE TRANSFER 消息中包括为 UE 分配的低层配置,并将其传输到 gNB-CU…

RK3568启动配置

硬件环境 连上电脑,这时候默认是uboot启动linux,因此我们需要进入uboot的命令行界面,通过网络加载oneos运行。启动后按空格: Rockchip watchdog timeout: 15 sec Net: eth0: ethernetfe2a0000, eth1: ethernetfe010000 Hit key…

视频去水印的3款软件:助你轻松一键去水印

在视频创作的世界里,水印往往是一个让人头疼的问题。无论是从网络上下载的素材,还是其他平台分享的视频,都可能带有水印,影响整体美观。今天,就为大家介绍三款视频去水印软件,它们分别是影忆、Online Water…

数据结构-二叉树_堆

一. 树的概念 树在我们的日常生活中随处可见,人们将生活中的树转换成存放数据的树形结构,就成了数据结构中的“树”。 如上图所示,自然界中的树有树根,有树枝,有树叶,当我们将其转换成树形结构时&#xf…

ModBus Pull的详细安装教程

目录 一.导航 二 .安装 三.激活 四.使用 一.导航 modbus poll 和 modbus slave 是两种Modbus协议的软件工具 。 Modbus Poll:Modbus Poll 是一个客户端(或主站)软件,它允许用户与支持Modbus协议的设备进行通信。 Modbus Sla…

英国毕业论文问卷及采访设计思路解析

在大多数情况下,英国毕业论文都需要学生收集一手资料。而在一手资料的收集过程中,学生可以通过设计试验,观察,问卷和采访等方式从目标人群或者实验人群中收集到所需的一手数据。在本文中,我们将针对商科和教育学之类的…

Linux——echo-tail-重定向符

echo命令 类似printf 输出 反引号 重定向符 > 和 >> > 覆盖 >> 追加 tail命令 查看文件尾部内容,追踪文件最新更改 tail -num 从尾部往上读num行,默认10行 tail -f 持续跟踪

使用 Go 语言与 Redis 构建高效缓存与消息队列系统

什么是 Redis? Redis 是一个开源的内存数据库,支持多种数据结构,包括字符串、列表、集合、哈希和有序集合。由于 Redis 运行在内存中,读写速度极快,常被用于构建缓存系统、实时排行榜、会话存储和消息队列等高并发场景…

论文《OneLLM:One Framework to Align All Modalities with Language》

(没有会员只有做100个节点,mindmaster金主爸爸可不可以给我一个会员啊啊啊啊呜呜呜~) 欣赏论文的图和表: 表中作者将自己的模型那一行选择灰色作为背景,更加凸显自己的数据,另外对于最好的结果用加粗黑体…

threads_created增加过大?

set global thread_cache_size128; 在my.cnf文件中直接加上thread_cache_size128 原值为58 MySQL中的Threads线程相关指标解读 - SRE Work mysql性能优化(thread_created) - 八戒vs - 博客园 MySQL :: MySQL 8.4 Reference Manual :: 7.1.10 Server Status Variables

基于Vue3+axios+element-plus等技术开发的新闻发布管理系统

新闻发布管理系统是一个基于Vue3piniavue-routeraxioselement-plus等开发的系统,主要功能包括:登录模块、注册模块、新闻分类管理模块、新闻管理模块、个人中心模块(包括基本资料、更换头像、重置密码功能)等。 代码下载&#xf…

凡事预则立,不预则废

在交易的竞技场上,每位交易员都拥有自己的一套打法,这些独特的交易风格不仅塑造了他们的个人特点,更是他们成功的关键所在。今天采访的Eagle Trader交易员刘先生,就给我一种很稳妥的感觉,那么,刘先生的“稳…

Linux使用Docker部署Paperless-ngx结合内网穿透打造无纸化远程办公

文章目录 前言1. 部署Paperless-ngx2. 本地访问Paperless-ngx3. Linux安装Cpolar4. 配置公网地址5. 远程访问6. 固定Cpolar公网地址7. 固定地址访问 前言 本文主要介绍如何在Linux系统本地部署Paperless-ngx开源文档管理系统,并结合cpolar内网穿透工具解决本地部署…

腾讯云License 相关

腾讯云视立方 License 是必须购买的吗? 若您下载的腾讯云视立方功能模块中,包含直播推流(主播开播和主播观众连麦/主播跨房 PK)、短视频(视频录制编辑/视频上传发布)、终端极速高清和腾讯特效功能模块&…

【springboot9734】基于springboot+vue的财务管理系统

作者主页:Java码库 主营内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 项目描述 随着信息技术和网络技术的飞速发展,人类已进…

2024 kali虚拟机安装教程,分两大步骤,图文讲解(2)

准备工作: 按照图文讲解(1)搭建好虚拟机,继续以下步骤 2024 kali虚拟机安装教程,分两大步骤,图文讲解(1)-CSDN博客 正式开始 1.开启,↑ ↓ 方向键,选择第一…