【高级编程】Java IO流(上)字节流 InputStream OutputStream

news2024/11/15 11:45:29

文章目录

    • 文件操作
    • 输入流InputStream
    • 输出流OutputStream

文件操作

文件是指相关记录或放在一起的数据的集合。是一种用于存储数据的基本单位,它可以包含各种类型的信息,例如文本、图像、音频或视频。文件在计算机中通常存储在磁盘或其他存储介质上,并且每个文件都有一个唯一的文件名和扩展名(如 .txt.jpg.mp4),用于标识文件的类型和用途。

文件的主要特征

文件名和扩展名、文件路径、文件大小、文件属性、文件系统。

在 Java 中,java.io.File 类是进行文件和目录操作的主要类。它提供了一些方法来创建、删除、检查文件和目录的属性以及操作文件内容。

方法名称说明
boolean exists( )判断文件或目录是否存在
boolean isFile( )判断是否是文件
boolean isDirectory( )判断是否是目录
String getPath( )返回此对象表示的文件的相对路径名
String getAbsolutePath( )返回此对象表示的文件的绝对路径名
String getName( )返回此对象表示的文件或目录的名称
boolean delete( )删除此对象指定的文件或目录
boolean createNewFile( )创建名称的空文件,不创建文件夹
long length( )返回文件的长度,单位为字节, 如果文件不存在,则返回 0L
String path = "D:/4072/1/l.txt";
File file = new File(path);

// 判断文件或目录是否存在
System.out.println("判断文件或目录是否存在: " + file.exists());
// 判断是否是文件
System.out.println("判断是否是文件: " + file.isFile());
// 判断是否是文件夹
System.out.println("判断是否是文件夹: " + file.isDirectory());
// 获取相对路径
System.out.println("相对路径: " + file.getPath());
// 获取绝对路径
System.out.println("绝对路径: " + file.getAbsolutePath());
// 获取文件或目录名称
System.out.println("获得文件或目录名称: " + file.getName());
// 获取文件字节数
System.out.println("获得文件字节数: " + file.length());
// 删除文件或目录
System.out.println("删除文件或目录: " + file.delete());

在指定文件夹下创建 txt 文件

public static void main(String[] args) {
    // 定义路径和文件名
    String path = "D:/test/1/";
    String fileName = "1.txt";

    // 创建 File 对象表示文件夹
    File dir = new File(path);

    // 如果路径不存在或者不是一个目录,则 mkdirs() 尝试创建多级目录
    if (!dir.exists() || !dir.isDirectory()) {
        if (dir.mkdirs()) { 
            System.out.println("进来创建文件夹");
        } else {
            System.out.println("无法创建文件夹");
            return; // 如果无法创建文件夹,退出程序
        }
    }

    // 创建 File 对象表示文件
    File file = new File(path, fileName);

    try {
        // 如果文件不存在,则创建新文件
        if (!file.exists() || !file.isFile()) {
            if (file.createNewFile()) {
                System.out.println("进来创建文件....");
            } else {
                System.out.println("文件创建失败");
            }
        } else {
            System.out.println("文件已存在");
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

流是一组有序的数据序列,以先进先出方式发送信息的通道

在这里插入图片描述

Java流的分类

在这里插入图片描述

输入输出流是相对于计算机内存来说的

在这里插入图片描述

字节流是8位通用字节流,字符流是16位 Unicode 字符流

输入流InputStream

InputStream 类常用方法

int read( )

int read(byte[] b)

int read(byte[] b,int off,int len)

void close( ) // 关闭流 释放资源

int available() // 可以从输入流中读取的字节数目

子类 FileInputStream 常用的构造方法

FileInputStream(File file)

FileInputStream(String name)	

使用 FileInputStream 读文本文件

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

public class FileReadExample {
    public static void main(String[] args) {
        InputStream is = null;
        try {
            // 打开文件输入流
            is = new FileInputStream("D:\\4072\\1\\1.txt");
            // 获取文件的字节数
            byte[] b = new byte[is.available()];
            // 读取内容到字节数组
            is.read(b);
            // 将字节数组转换为字符串(使用 GBK 编码)
            String str = new String(b, "GBK");
            // 打印字符串
            System.out.println(str);
        } catch (IOException e) {
            // 捕获并打印异常堆栈
            e.printStackTrace();
        } finally {
            // 关闭输入流并释放资源
            try {
                if (is != null) is.close();
            } catch (IOException e) {
                e.printStackTrace();
}}}}

输出流OutputStream

OutputStream 类常用方法

void write(int c)

void write(byte[] buf)

void write(byte[] b,int off,int len)

void close() // 释放资源

void flush() // 强制把缓冲区的数据写到输出流中

子类 FileOutputStream 常用的构造方法

FileOutputStream(File file)

FileOutputStream(String name)

FileOutputStream(String name,boolean append)

前两种构造方法在向文件写数据时将覆盖文件中原有的内容,append 参数默认为 false

在这里插入图片描述
在这里插入图片描述

创建 FileOutputStream 实例时,如果相应的文件并不存在,则会自动创建一个空的文件

使用 FileOutputStream 写文本文件

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

public class FileWriteExample {
    public static void main(String[] args) {
        OutputStream os = null;
        try {
            // 打开文件输出流,并以追加模式写入
            os = new FileOutputStream("p:\\4072\\1\\1.txt", true);
            String msg = "张三";
            // 将字符串转换为字节数组并调用 write 方法进行写入
            os.write(msg.getBytes());
            System.out.println("写入成功......");
        } catch (IOException e) {
            // 捕获并打印异常堆栈
            e.printStackTrace();
        } finally {
            // 关闭输出流并释放资源
            try {
                if (os != null) os.close();
            } catch (IOException e) {
                e.printStackTrace();
}}}}

复制文件内容代码示例:

public static void main(String[] args) {
    InputStream is = null; // 读
    OutputStream os = null; // 写
    try {
        // 打开文件输入流和输出流
        is = new FileInputStream("D:\\4072\\1\\1.txt");
        os = new FileOutputStream("D:\\4072\\1\\2.txt");
        int b;
        // 逐字节读取文件内容并写入到目标文件
        while ((b = is.read()) != -1) {
            os.write(b);
        }
        System.out.println("复制成功!!!!");
    } catch (IOException e) {
        // 捕获并打印异常堆栈
        e.printStackTrace();
    } finally {
        // 关闭输入输出流并释放资源
        try {
            if (is != null) is.close();
            if (os != null) os.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
}}}

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

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

相关文章

华为OD机试 - 最大相连男生数 - 矩阵(Java 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(E卷D卷A卷B卷C卷)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加…

SprinBoot+Vue健康健身追踪系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质…

基于SpringBoot+Vue社区家政服务预约平台【提供源码+答辩PPT+参考文档+项目部署】

项目技术架构: 该家政服务预约平台基于B/S架构,后端采用SpringBoot架构,前端采用VueElementUI技术,并结合MySQL数据库。该系统分为系统管理员、家政人员、雇主用户三种角色。 系统核心功能: 用户管理、家政人员管理…

Zenmap

Zenmap Zenmap 本身作为一款端口扫描的工具无法直接判断一台服务器是否存在具体的漏洞,但它可以帮助你识别服务器上的开放端口、运行的服务以及操作系统信息,通过这些信息,需要你自己凭借经验推测可能存在的漏洞,或者结合其他工具…

微服务CI/CD实践(六)Jenkins Docker 自动化构建部署Java微服务

微服务CI/CD实践系列: 微服务CI/CD实践(一)环境准备及虚拟机创建 微服务CI/CD实践(二)服务器先决准备 微服务CI/CD实践(三)gitlab部署及nexus3部署 微服务CI/CD实践(四&#xff09…

log4j日志封装说明—slf4j对于log4j的日志封装-正确获取调用堆栈

日志是项目中必用的东西,日志产品里最普及应该就是log4j了。(logback这里暂不讨论。) 先看一下常用的log4j的用法,一般来说log4j都会配合slf4j或者common-logging使用,这里已slf4j为例。添加gradle依赖: dependencies { compile(l…

When is a Liability not a Liability

When is a Liability not a Liability? Textual Analysis, Dictionaries, and 10-Ks(2011) 论文阅读 文章目录 When is a Liability not a Liability? Textual Analysis, Dictionaries, and 10-Ks(2011) 论文阅读 Abstract哈佛H4N List 与 Fin-Neg如何创建词汇列表&#xff1…

声音克隆工具CosyVoice

阿里的免费声音克隆工具CosyVoice CosyVoice 是阿里通义实验室在七月初开源的一款专注于自然语音合成的语音大模型,它具备多语言、多音色和细腻的情感控制能力。这个系统支持中文、英文、日文、粤语和韩语五种语言的语音生成,并且在语音合成的效果上远超…

【python】SemEval 2014数据集 xml文件格式转换为csv+txt

笔记为自我总结整理的学习笔记,若有错误欢迎指出哟~ 【python】SemEval 2014数据集 xml文件格式转换为csvtxt SemEval2014简介4个子任务数据格式xml转csvxml转txt SemEval2014简介 SemEval2014,ABSA( Aspect Based Sentiment Analysis&#…

Dance with Compiler - EP3 ARM64 汇编传参约定以及 restrict 汇编分析

在 ARM64 架构(也称为 AArch64)中,函数调用约定定义了寄存器如何用于传递参数和返回值。这些约定有助于实现高效的函数调用和返回。在 ARM64 的汇编中,寄存器传参遵循以下约定: 参数传递寄存器 x0 - x7: 这 8 个寄存器…

Golang | Leetcode Golang题解之第396题旋转函数

题目: 题解: func maxRotateFunction(nums []int) int {numSum : 0for _, v : range nums {numSum v}f : 0for i, num : range nums {f i * num}ans : ffor i : len(nums) - 1; i > 0; i-- {f numSum - len(nums)*nums[i]ans max(ans, f)}return…

超声波气象站

超声波气象站的设计优势包括: 非接触式测量:超声波气象站利用超声波技术进行测量,可以在不接触被测物体的情况下进行精确的测量。这意味着测量过程不会受到外界干扰或影响,提高了测量的准确性和可靠性。 多参数测量:超…

LVGL 控件之标签(lv_label)

目录 一、概述二、标签1、设置文本2、长模式3、文本着色4、文本选择5、内置图标6、事件7、API 函数 一、概述 标签部件由三个部分组成:主体背景、滚动条和所选文本: LV_PART_MAIN(主体背景)使用所有典型的背景属性和文本属性。 …

windows手工杀毒-寻找可疑进程之网络连接

上篇回顾:windows手工杀毒-寻找可疑进程之句柄 上篇我们简单介绍了如何通过句柄发现可疑进程,主要有两个方向,一个是通过命名句柄的名称,利用全局唯一的句柄名反向标识进程,另一个就是通过句柄查看进程占有的资…

二、线性结构及算法

文章目录 一、稀疏数组1.1 实际需求1.2 基本介绍1.3 应用实例 二、队列2.1 引入2.2 基本介绍2.3 数组模拟队列 三、链表3.1 链表介绍3.2 单链表的应用实例3.3 单链表面试题3.4 双向链表应用实例3.5 单向环形链表 四、栈4.1 基本介绍4.2 数组模拟栈4.3 链表模拟栈4.4 栈实现综合…

PMP--一、二、三模--分类--14.敏捷--技巧--宣言

文章目录 技巧一模14.敏捷--宣言--重视实在的--工作的软件大于流程和文档19、 [单选] 一个关键干系人坚持团队用正式的文档广泛地记录软件代码。产品负责人解释说,虽然一定数量的文档是必要的,但团队成员最好把时间花在开发软件上,因为这对客…

Java 每日一刊(第2期):搭建开发环境

文章目录 JVM、JRE、JDKJVM(Java Virtual Machine,Java 虚拟机)JRE(Java Runtime Environment,Java 运行时环境)JDK(Java Development Kit,Java 开发工具包)JVM、JRE、JD…

1765asp.net古镇旅游网站VS开发sqlserver数据库web结构c#编程web网页设计

博主介绍:专注于Java .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的可以…

Python | Leetcode Python题解之第395题至少有K个重复字符的最长子串

题目: 题解: class Solution:def longestSubstring(self, s1: str, k: int) -> int:if k 1: return len(s1)n len(s1)res 0for c in range(1, len(set(s1)) 1):# 滑窗中字母种类个数恰好为 cfreq Counter()l cnt tcnt 0 for r, ch in enu…

安防监控/视频汇聚平台EasyCVR无法启动并报错“error while loading shared libraries”,如何解决?

安防监控/视频汇聚平台EasyCVR视频管理系统以其强大的拓展性、灵活的部署方式、高性能的视频能力和智能化的分析能力,为各行各业的视频监控需求提供了优秀的解决方案。通过简单的配置和操作,用户可以轻松地进行远程视频监控、存储和查看,满足…