【JavaEE】文件操作 —— IO

这篇具有很好参考价值的文章主要介绍了【JavaEE】文件操作 —— IO。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文件操作 —— IO

1. 文件的属性

  • 文件内容
  • 文件大小
  • 文件路径
  • 文件名称

2. 文件的管理

采用树形结构进行管理。

3. 文件路径

分为两种:相对、绝对路径。

  • 相对路径:相对于当前位置的路径,以“./xxx.xxx”为标志
  • 绝对路径:以从盘符开始到某一级的路径

4. 输入和输出——Input/Output

输入和输出是以CPU的角度进行观察。

输出:

  • 向屏幕上打印,就是打印内容从CPU流出,外设,所以是 输出
  • 向文件中写内容,就是将内容从CPU流出,到文件,所以是 输出

输入:

  • 从键盘上输入字符,就是字符从外设流入到CPU,所以是 输入
  • 从文件中读取内容,就是内容从文件流入到CPU,所以是 输入

5. 字节和字符

按照读取输入的方式不同可以分为按照字符流、字节流两种情况。

  • 字符流,按照字符编码规则,每次读取一个字符,根据指定的编码规则对读取到的字节进行解析,最终正确显示字符
  • 字节流,按照字节进行读取,每次读取一个字节(取决于给的byte[]是多长的,在read方法中传入的参数是多大)
方式 问题
字符流 只能操作文本文件
字节流 操作任意类型的文件
  • 但是字符流如果编码格式与文件不同步,那么也可能造成乱码问题。

6. deleteOnExit

退出时删除文件,常用于临时文件的删除。

会在程序退出时将文件删除。

7. 文件内容的读写 —— 数据流

7.1 数据流的分类

数据流分为两大类,分为字符流(Reader和Writer)、字节流(InputStream和OutputStream)

其中字符流适合使用于纯文本文件(使用记事本打开不是乱码的文件),字节流适用于任何文件。

因为字符流每次读一个字符,**根据编码规则能够自动选取读几个字节,**图像等类文件不适合;

但是字节流不论是什么文件每次就是一个字节,原原本本的进行读出。

7.2 读写文件内容

读写文件存在一种固定套路:

  1. 打开文件、流
  2. 读取文件
  3. 关闭文件、流

代码示例:

import java.io.*;

public class test3 {
    public static void main(String[] args) throws FileNotFoundException {
        File file = new File(".\\test.txt");

        // try with resources
        try(FileInputStream fis = new FileInputStream(file);
            FileOutputStream fos = new FileOutputStream(file)){
            // 写入
            String s = "qyy is the best.";
            fos.write(s.getBytes());

            // 读出
            int len = -1;
            byte[] bytes = new byte[1024];
            System.out.println(file.getAbsoluteFile() + "的内容为:");
            while((len = fis.read(bytes, 0, bytes.length)) != -1) {
                System.out.println(new String(bytes, 0, len));
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

        // 退出时删除——测试文件
        file.deleteOnExit();
    }
}

上述代码并没有使用close去关闭流,因为在这里使用了一种try with rescoures的语法,简单来说就是之前只是简单地使用try…catch进行捕获异常,这里的try语法在try后面加上了一堆括号,在里面写上需要释放资源的代码。

释放资源也可以将.close()写在finally{}中,但是上述语法更加简洁。

值得一提的是,只有实现了Closeable接口的类,才能放到try()中。比如上述的InputStream:

【JavaEE】文件操作 —— IO,javaEE,java-ee,java,前端

7.3 read方法——输出型参数

输出型参数本来是一个c/c++中常用的概念。输出型参数在c/c++中是将参数的引用写在参数位置,能够在函数运行完毕后不依赖于返回值的方式得到这个变量的值。好处:

  1. 能够携带多个返回值
  2. 避免在调用函数的过程中,函数未能正常返回退栈而导致的资源泄露(资源总是能够在上一级进行释放)

这里的read()方法也需要传入一个输出型参数byte[],用来存放读取到的文件内容。

其有三个参数:

【JavaEE】文件操作 —— IO,javaEE,java-ee,java,前端

参数 说明
byte[] b 存放文件内容的输出型参数
int off 从byte[]中第几个位置开始存放,是一个偏移量(offset)
int len 读取字节的实际长度,便于构建String变量将文件内容进行输出

7.4 Scanner读取文件

Scanner在之前的使用中,均是以Scanner scanner = new Scanner(System.in)的方式进行,这种方式表示是从键盘读入,数据从键盘流入系统,利用这个原理我们同样可以使得数据从文件流向文件/外设。

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class test4 {
    public static void main(String[] args) throws FileNotFoundException {
        Scanner scanner = new Scanner(new FileInputStream("test.txt"));

        while (scanner.hasNext()) {
            System.out.println(scanner.next());
        }
    }
}

运行结果:

【JavaEE】文件操作 —— IO,javaEE,java-ee,java,前端

7.4 几点说明

  1. write是首先会将文件内容全部都清空,即使你并没有往文件中输入任何内容,除非添加追加参数true【JavaEE】文件操作 —— IO,javaEE,java-ee,java,前端

  2. Reader与Writer方法的使用与InputStream和OutputStream相同,不再列出

8. 文件读写基本操作

8.1 文件的查找

因为文件是以“树形”结构构建,所以文件的查找本质上是一种多叉树的遍历。

所以就少不了使用**“递归”**。

代码示例:

import java.io.File;
import java.util.regex.Pattern;

public class test5 {
    public static void main(String[] args) {
        // 文件的查找
        
        // 使用正则表达式进行匹配文件
        String regex = "qyy.*";
        Pattern pattern = Pattern.compile(regex);

        File path = new File("D:\\code\\0java\\J2024_01_19");// 从D:\code\0java\J2024_01_19开始找
        searchFile(pattern, path);
    }

    private static void searchFile(Pattern targetFile, File path) {
        File[] files = path.listFiles();

        assert files != null;// 路径不能为空

        for (File file : files) {
            if (file.isFile()) {
                // 是文件——看是否匹配要查找的文件
                if (targetFile.matcher(file.getName()).matches()) {
                    System.out.println("Found: " + file.getAbsolutePath());
                }
            } else if (file.isDirectory()) {
                // 是目录——递归
                searchFile(targetFile, file);
            }else {
                // null
            }
        }
    }
}

值得一提的是,这段代码中使用了Pattern类,利用这个类可以进行正则表达式的匹配。

compile(String regex): 静态方法,用于将给定的正则表达式编译为 Pattern 对象。

matcher(CharSequence input): 用于创建一个 Matcher 对象,该对象用于在输入字符序列上执行匹配操作。文章来源地址https://www.toymoban.com/news/detail-811328.html

8.2 文件的复制

import java.io.*;

public class test6 {
    public static void main(String[] args) {
        // 实现文件复制
        // 从test.txt复制到同级目录下的test2.txt
        File src = new File("./test.txt");
        File dest = new File("./test2.txt");

        try(FileInputStream fis = new FileInputStream(src);
            FileOutputStream fos = new FileOutputStream(dest)) {
            int len = -1;
            byte[] bytes = new byte[1024];
            while ((len = fis.read(bytes, 0 ,bytes.length)) != -1) {
                String s = new String(bytes, 0, len);
                System.out.println(s);
                // 一边读,一边写
                fos.write(s.getBytes());
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

到了这里,关于【JavaEE】文件操作 —— IO的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【JavaEE基础学习打卡03】Java EE 平台有哪些内容?

    📜 本系列教程适用于Java Web初学者、爱好者,小白白。我们的天赋并不高,可贵在努力,坚持不放弃。坚信量最终引发质变,厚积薄发。 🚀 文中白话居多,尽量以小白视角呈现,帮助大家快速入门。 🎅 我是 蜗牛老师 ,之前网名是 Ongoing蜗牛 ,人如其名,干啥都慢,所以

    2024年02月12日
    浏览(47)
  • 【JavaEE基础学习打卡02】是时候了解Java EE了!

    📜 本系列教程适用于 Java Web 初学者、爱好者,小白白。我们的天赋并不高,可贵在努力,坚持不放弃。坚信量最终引发质变,厚积薄发。 🚀 文中白话居多,尽量以小白视角呈现,帮助大家快速入门。 🎅 我是 蜗牛老师 ,之前网名是 Ongoing蜗牛 ,人如其名,干啥都慢,所

    2024年02月12日
    浏览(48)
  • 【JavaEE初阶】 认识文件与Java中操作文件

    我们先来认识狭义上的文件(file)。针对硬盘这种持久化存储的I/O设备,当我们想要进行数据保存时,往往不是保存成一个整体,而是独立成一个个的单位进行保存,这个独立的单位就被抽象成文件的概念,就类似办公桌上的一份份真实的文件一般。 文件除了有数据内容之外,

    2024年02月07日
    浏览(45)
  • JavaEE初阶 - 文件/IO

    我们先来认识狭义上的文件(file)。针对硬盘这种持久化存储的I/O设备,当我们想要进行数据保存时,往往不是保存成一个整体,而是独立成一个个的单位进行保存,这个独立的单位就被抽象成文件的概念,就类似办公桌上的一份份真实的文件一般。 文件除了有数据内容之外,

    2024年02月02日
    浏览(37)
  • JAVAEE初阶 文件IO(一)

    1.1 CPU CPU是Central Processing Unit中央处理器的简称,作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。CPU 自产生以来,在逻辑结构、运行效率以及功能外延上取得了巨大发展。 1.2 内存 内存(Memory)也被称为内存储器,其作用是用于暂时存放CPU中的运算数

    2024年01月22日
    浏览(41)
  • 【JavaEE】文件操作: File 类的用法和 InputStream, OutputStream 的用法

    目录 1. File 概述 1.1 File的属性 1.2 File的构造方法 1.3 File的方法 2.读文件 2.1 InputStream 概述 2.2 FileInputStream 概述 2.3 正确打开和关闭文件的方式 2.4 不同方式读取文件代码示例 2.4 另一种方法:利用 Scanner 进行字符读取 3.写文件 3.1 OutputStream 概述 3.2 利用 OutputStreamWriter 进行字符写

    2024年01月19日
    浏览(30)
  • IO(JavaEE初阶系列8)

    目录 前言: 1.文件 1.1认识文件 1.2结构和目录 1.3文件路径 1.4文本文件vs二进制文件 2.文件系统的操作 2.1Java中操作文件 2.2File概述 2.2.1构造File对象 2.2.2File中的一些方法 3.文件内容的操作 3.1字节流 3.1.1InPutStream的使用方法 3.1.2OutPutStream的使用方法 3.2字符流 3.2.1Reader的使用方法

    2024年02月14日
    浏览(47)
  • 板块一 Servlet编程:第八节 文件上传下载操作 来自【汤米尼克的JavaEE全套教程专栏】

    在之前的内容中我们终于结束了Servlet五大对象的学习,我们发现这些对象在操作数据时往往只是简单的参数传递,那我们该如何操作更复杂的资源呢?比如要在后端上传下载一个文件,这一节完善一个Servlet的重要知识,就是文件的上传下载操作 使用表单提交 设置表单的提交

    2024年02月22日
    浏览(46)
  • 【Java EE】文件操作

    目录 1.认识文件 2.树型结构组织和目录 3.文件路径(Path) 4.其他知识 5.Java中操作文件 5.1File概述 5.1.1属性 5.1.2构造方法 5.1.3方法 5.2代码示例 1.认识文件 我们先来认识狭义的文件(file)。针对1硬盘这种持久化存储的I/O设备,当我们想要进行数据保存时,往往不是保存一个整

    2024年04月22日
    浏览(54)
  • 学习JavaEE的日子 Day33 File类,IO流

    File是文件和目录路径名的抽象表示 File类的对象可以表示文件:C:UsersDesktophhy.txt File类的对象可以表示目录路径名:C:UsersDesktop File只关注文件本身的信息(文件名、是否可读、是否可写…),而不能操作文件里面的内容 对文件里的数据进行操作的是:IO流 需求1:通过程序

    2024年04月12日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包