java中的字节流和File类

目录

正文:

1.File类

1.1概述

1.2常用方法

2.FileInputStream

2.1概述

2.2常用方法

3.FileOutputStream

3.1概述

3.2常用方法

总结:


正文:

1.File类

1.1概述

File类是Java中用来表示文件或目录的类,它提供了一系列方法来操作文件和目录。但File类并不是一个真正的文件对象,它只是一个用于操作文件的引用。它允许你访问和修改文件的属性,如名称、路径、权限等,以及执行一些基本的文件操作,如创建、删除、移动文件或目录

1.2常用方法

构造方法:File类提供了多种构造方法来创建File对象:

  1. File(String pathname):根据给定的路径名创建一个新File对象。
  2. File(String parent, String child):根据父路径和子路径创建一个新File对象。
  3. File(File parent, String child):根据父File对象和子路径创建一个新File对象。

exists():检查指定的文件或目录是否存在。

boolean exists = file.exists();

isFile():检查指定的路径是否指向一个文件。

boolean isFile = file.isFile();

isDirectory():检查指定的路径是否指向一个目录。

boolean isDirectory = file.isDirectory();

delete():删除文件或目录。如果文件是目录,则只有当它为空时才能被删除。

boolean deleted = file.delete();

mkdir():创建文件指示的目录。

boolean created = file.mkdir();

mkdirs():创建文件指示的目录,包括任何必需但不存在的父目录。

boolean created = file.mkdirs();

renameTo(File dest):将文件重命名为指定的目标文件。如果目标是一个目录,则原文件将被移动到该目录下。

File dest = new File("path/to/new/location"); boolean renamed = file.renameTo(dest);

listFiles():列出当前目录下的文件和子目录。

File[] files = file.listFiles();
for (File f : files) {
    System.out.println(f.getName());
}

length():返回文件的长度,如果表示的是一个目录,则返回0L。

long size = file.length();

getAbsolutePath():返回文件的绝对路径。

String path = file.getAbsolutePath();

getPath():返回文件的路径名字符串。

String path = file.getPath();

getName():返回由父目录的路径分隔符分隔的文件名。

String name = file.getName();

lastModified():返回文件的最后一次修改时间。

long time = file.lastModified();

setLastModified(long time):设置文件的最后一次修改时间。

boolean modified = file.setLastModified(System.currentTimeMillis());

setReadOnly():将文件设置为只读。

boolean readOnly = file.setReadOnly();

canRead():检查应用程序是否有权限读取此文件。

boolean canRead = file.canRead();

canWrite():检查应用程序是否有权限修改此文件。

boolean canWrite = file.canWrite();

下面给几个代码示例来加深理解

普通文件的创建,删除示例

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

public class test {
    public static void main(String[] args) throws IOException {
        //当前文件并不存在
        File file = new File("hello-world.txt");
        System.out.println(file.exists());
        System.out.println(file.isDirectory());
        System.out.println(file.isFile());
        System.out.println(file.createNewFile());
        System.out.println(file.exists());
        System.out.println(file.isDirectory());
        System.out.println(file.isFile());
        System.out.println(file.createNewFile());
    }
}

这段代码需要注意的是,调用File的构造方法并不会创建出这个文件,只是创建出文件的引用即使这个文件并不存在,调用crateNewFile后才真正有了文件。

运行结果:

 

 目录创建示例:

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

public class test {
    public static void main(String[] args) throws IOException {
        //该文件并不存在
        File dir = new File("some-parent\\some-dir");
        System.out.println(dir.isDirectory());
        System.out.println(dir.isFile());
        System.out.println(dir.mkdir());
        System.out.println(dir.isDirectory());
        System.out.println(dir.isFile());
    }
}

mkdir() 的时候,如果中间目录不存在,则无法创建成功; mkdirs() 可以解决这个问题。

运行结果为:

 

2.FileInputStream

2.1概述

字节输入流(InputStream)是Java中用于从输入源读取字节数据的抽象类。它是所有字节输入流类的超类,提供了一系列方法来读取字节数据。FileInputStream是字节输入流的一种,用于从文件中读取字节数据。它继承自InputStream类,并提供了一系列方法用于读取文件中的数据。

2.2常用方法
  1. 构造方法:

    • FileInputStream(String name):根据指定的文件名创建FileInputStream对象。
    • FileInputStream(File file):根据指定的File对象创建FileInputStream对象。
  2. 读取数据方法:

    • int read():从输入流中读取下一个字节的数据,返回读取的字节(0-255),如果到达文件末尾则返回-1。
    • int read(byte[] b):从输入流中最多读取b.length个字节的数据到字节数组b中,返回实际读取的字节数。
    • int read(byte[] b, int off, int len):从输入流中最多读取len个字节的数据到字节数组b中,从数组的off位置开始存储,返回实际读取的字节数。
  3. 其他方法:

    • long skip(long n):跳过n个字节的数据,返回实际跳过的字节数。
    • int available():返回剩余可读取的字节数。
    • void close():关闭输入流并释放与之关联的资源。

使用FileInputStream的一般步骤如下:

  1. 创建FileInputStream对象,指定要读取的文件。
  2. 使用read()方法读取文件中的数据,可以逐字节读取或读取到字节数组中。
  3. 处理读取的数据。
  4. 关闭FileInputStream对象,释放资源。

代码示例:

import java.io.InputStream;
import java.io.FileInputStream;
import java.io.IOException;

public class InputStreamExample {
    public static void main(String[] args) {
        // 尝试打开一个文件输入流
        try (InputStream in = new FileInputStream("example.txt")) {
            byte[] buffer = new byte[1024];
            int bytesRead;
            // 循环读取数据直到文件结束
            while ((bytesRead = in.read(buffer)) != -1) {
                // 将读取的字节转换为字符串
                String readData = new String(buffer, 0, bytesRead);
                System.out.println(readData);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

注意事项

  • InputStreamread()方法可能会抛出IOException,因此在读取数据时需要进行异常处理。
  • 使用try-with-resources语句可以确保InputStream在使用完毕后被正确关闭,避免资源泄露。
  • 读取操作是阻塞的,如果读取到流的末尾,read()方法将返回-1。
  • available()方法返回的是一个估计值,实际可读取的字节数可能会更少。
  • FileInputStream是以字节为单位进行读取的,因此无法直接处理中文字符。当使用FileInputStream读取包含中文的文件时,需要将字节数据转换为字符数据。

3.FileOutputStream

3.1概述

Java中的输出流是用于将数据从Java程序发送到外部目的地的I/O流。OutputStream是所有字节输出流的抽象类,定义了写入字节数据的基本方法。FileOutputStream是Java中用于向文件写入数据的输出流类。它继承自OutputStream类,是字节输出流的一种。FileOutputStream可以用来写入字节数据到文件中,可以创建新文件或覆盖已有文件的内容。

3.2常用方法
  1. 构造方法:

    • FileOutputStream(String name):根据指定的文件名创建FileOutputStream对象。如果文件不存在,则会创建新文件;如果文件已存在,则会覆盖原有内容。
    • FileOutputStream(String name, boolean append):根据指定的文件名和追加标志创建FileOutputStream对象。如果append为true,则会在文件末尾追加数据;如果为false,则会覆盖原有内容。
    • FileOutputStream(File file):根据指定的File对象创建FileOutputStream对象。
  2. 常用方法:

    • void write(int b):将指定的字节写入文件。
    • void write(byte[] b):将字节数组b中的数据写入文件。
    • write(byte[] b, int off, int len):写入字节数组的一部分,从偏移量 off 开始,长度为 len。
    • void close():关闭输出流并释放资源。

示例代码:

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

public class FileOutputStreamExample {
    public static void main(String[] args) {
        String content = "Hello, World!";
        String fileName = "example.txt";

        try (FileOutputStream fos = new FileOutputStream(fileName)) {
            // 将字符串转换为字节并写入文件
            fos.write(content.getBytes());
            System.out.println("Data written to " + fileName);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这段代码实现了将字符串内容"Hello, World!"写入到文件"example.txt"中的功能。通过FileOutputStream的write方法,将字符串转换为字节数组并写入文件。

注意事项

  • 使用 FileOutputStream 写入文件时,如果文件不存在,它会自动创建文件;如果文件已存在,它将覆盖文件内容,除非在构造方法中指定 append 参数为 true
  • FileOutputStream 的写入方法是阻塞的,意味着在所有数据被写入之前,调用线程将被阻塞。
  • 必须处理 IOException,因为写入操作可能会失败,例如,如果设备已满或访问被拒绝。
  • 使用 try-with-resources 语句可以确保 FileOutputStream 在使用完毕后被正确关闭,即使发生异常也是如此。
  • 如果需要写入字符数据,应使用 Writer 类(如 FileWriter),因为 FileOutputStream 只能处理字节数据。

总结:

File类用于文件和目录的管理,FileInputStream用于从文件中读取字节数据,FileOutputStream用于向文件写入字节数据。这三个类在文件操作中扮演着不同的角色,分别用于文件的元数据操作、读取数据和写入数据。在文件处理中,这三个类通常会结合使用,实现对文件的完整操作。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++语言】字符串String类的深拷贝与浅拷贝

深浅拷贝定义 拷贝对象时,需要创建相同的字节序、类型、和资源。 经典的string类问题 // 为了和标准库区分,此处使用String class String { public:/*String():_str(new char[1]){*_str \0;}*///String(const char* str "\0") 错误示范//…

Dynamic World Training Data动态世界训练和验证数据集(土地分类和土地利用)

摘要: 动态世界训练数据(Dynamic World Training Data )是一个由超过 50 亿像素的人工标注欧空局哨兵-2 卫星图像组成的数据集,分布在从世界各地收集的 24000 块瓷砖上。该数据集旨在训练和验证自动土地利用和土地覆被制图算法。分辨率为 10 米的 5.1km x 5.1km 瓦片采用十…

软件系统安全设计(安全保证措施)

软件安全保证措施word 软件所有全套资料获取进主页或者本文末个人名片直接。

欧拉回路(leetcode 重新安排行程)

先学习一下欧拉回路是怎么一回事。 对于图中这七个节点,从节点1出发,最终要到达节点1,并且每条路只能走一次,且每条路都得走过一次。 使用dfs,如果算法按照字典序的排列方式选择下一个节点。 第一部分:那…

设计模式: 模板模式

目录 一,模板模式 二,特点 三,组成部分 四,实现步骤 五,案例 一,模板模式 模板模式(Template Pattern)是一种行为型设计模式,它在超类中定义了一个算法的骨架&#…

spring boot 启动流程详解

主启动类 SpringBootApplication MapperScan("com.example.mapper") public class StableBootApplication {public static void main(String[] args) {SpringApplication.run(StableBootApplication.class,args);} }SpringApplication类中有个静态run()方法&#xf…

ICode国际青少年编程竞赛- Python-1级训练场-for循环练习

ICode国际青少年编程竞赛- Python-1级训练场-for循环练习 1、 for i in range(3):Dev.step(4)Dev.turnLeft()2、 for i in range(3):Dev.step(2)Dev.turnRight()Dev.step(2)Dev.turnLeft()3、 for i in range(3):Dev.step(2)Dev.turnRight()Dev.step(2)Dev.turnLeft()4、 for…

飞致云开源社区月度动态报告(2024年4月)

自2023年6月起,中国领先的开源软件公司FIT2CLOUD飞致云以月度为单位发布《飞致云开源社区月度动态报告》,旨在向广大社区用户同步飞致云旗下系列开源软件的发展情况,以及当月主要的产品新版本发布、社区运营成果等相关信息。值得注意的是&…

VS下编译cuda代码MSB3721,返回代码255

查了一天才找到问题 将Generate Relocatable Device Code 设置为true

Kelpa-小型服务器开发框架分享

分享我的服务器开发框架--Kelpa: 这是一个由现代C编写的小型、学习性质的服务器框架,包含压缩,序列化,IO调度,Socket封装,文件配置,日志库等多个完整自研模块: 项目目前仍处于开发阶…

【银角大王——Django课程——用户表的基本操作】

Django课程——用户表的基本操作 模板的继承用户管理用户列表展示新建用户Django组件原始方法【麻烦,太原始】form组件modelform组件 使用modelsform组件编写添加页面 模板的继承 (1)先写一个页面模板————这个案例中的模板基本上就是一个…

无言:破局之道:顿悟+坚持——早读(逆天打工人爬取热门微信文章解读)

致无言 引言Python 代码第一篇 洞见 7年跟踪调查北京28个精英家庭:为什么顶尖大学孩子大多来自有钱家庭?第二篇 人民日报 来了!新闻早班车要闻社会政策 结尾 控制你的情绪 否则它将控制你 在紧张的游戏中 控制情绪 避免冲动行为 是每个玩家的…

学习java的继承

1.什么是继承 java中提供了一个关键字,extends,可以让一个类与另一个类建立起父子关系。 例如 public class B extends A { --- } 在这里,我们称A类为父类(也被称为基类或者超类)B类称为子类(或者是派生…

IDEA 申请学生许可证

如果你有学生账号,并且账号是 EDU 结尾的,可以申请 IDEA 的学生许可证。 有效期一年,完全免费。 在界面上输入邮件地址,然后单击按钮提交。 邮件中单击链接 JetBrains 会把一个带有链接的邮件发送到你的邮箱中。 单击邮箱中的…

【CTF MISC】XCTF GFSJ0512 give_you_flag Writeup(图像处理+QR Code识别)

give_you_flag 菜狗找到了文件中的彩蛋很开心,给菜猫发了个表情包 解法 图片的最后一帧好像闪过了什么东西。 用 Photoshop 打开,检查时间轴。 找到一张二维码,但是缺了三个角(定位图案),无法识别。 找一…

C语言----贪吃蛇(补充)

各位看官好,我想大家应该已经看过鄙人的上一篇博客贪吃蛇了吧。鄙人在上一篇博客中只是着重的写了贪吃蛇的实现代码,但是前期的一些知识还没有具体的介绍,比如确认光标位置,句柄等。那么我这一篇博客就来补充上一篇博客所留下来的…

使用 Wireshark 实现 ARP 嗅探监听网络

前言 Wireshark是一个开源的网络协议分析工具,用于捕获和分析网络数据包。它可以在多个操作系统上运行,并提供了强大的功能和用户友好的界面。 通过Wireshark,用户可以捕获网络流量,并对其进行深入的分析。它支持多种协议的解析…

计算机网络-408考研

后续更新发布在B站账号:谭同学很nice http://【计算机408备考-什么是计算机网络,有什么特点?】 https://www.bilibili.com/video/BV1qZ421J7As/?share_sourcecopy_web&vd_source58c2a80f8de74ae56281305624c60b13http://【计算机408备考…

一文读懂Mysql数据库索引原理

MyISAM 存储引擎索引实现: MyISAM 索引文件(磁盘上表对应.MYI)和数据文件(MYD)是分离的(非聚集) InnoDB 存储引擎索引实现: InnoDB 索引实现(聚集) 表数据文…

Bert基础(二十)--Bert实战:机器阅读理解任务

一、机器阅读理解任务 1.1 概念理解 机器阅读理解(Machine Reading Comprehension, MRC)就是给定一篇文章,以及基于文章的一个问题,让机器在阅读文章后对问题进行作答。 在机器阅读理解领域,模型的核心能力体现在对…