Java-io(输入/输出)

news2024/10/7 20:34:54

文章目录

  • 绪论
  • 输入流
  • 输出流
  • File类
  • 文件输入 / 输出流
    • 字节输入输出流
    • 字符输入输出流
  • End

绪论

首先如果我们在Java编写的一个程序中获得了想要的某种结果,那么在程序结束后,这个结果还存在嘛?不存在的,因为在Java程序运行时,程序会被加载到内存中在内存中运行,但是,在程序结束后虚拟机会自动释放内存空间,中间程序得到得结果也会消失,但是我们如果想保存这个结果呢?之前因为我们学习过使用JDBC技术链接数据库,这也能达到目的,但是对于某些长文本数据存储到数据库中就有些不便,那么这次我们学习Java的io技术可以将程序结果存储到本地的文件中,随取随存。



知识架构

在这里插入图片描述



输入流


Java中的输入流是一种用于从外部设备读取数据的机制。它提供了一组类和接口,用于从不同的数据源读取数据,如文件、网络连接、控制台等。

Java中的输入流主要分为以下几种类型:

  1. 字节流(Byte Stream):以字节为单位进行读写操作的流。常见的字节流类包括InputStream和OutputStream。
  2. 字符流(Character Stream):以字符为单位进行读写操作的流。常见的字符流类包括Reader和Writer。
  3. 缓冲流(Buffered Stream):缓冲流可以提高读写效率,减少对外部设备的访问次数。常见的缓冲流类包括BufferedInputStream、BufferedOutputStream、BufferedReader和BufferedWriter。
  4. 数据流(Data Stream):数据流用于读写基本数据类型,如int、float、double等。常见的数据流类包括DataInputStream和DataOutputStream。
  5. 转换流(Conversion Stream):转换流可以将一种类型的流转换为另一种类型的流,例如InputStreamReader可以将字节流转换为字符流。

常规常见输入流步骤:

  1. 创建输入流对象:根据需要创建相应的输入流对象,例如使用FileInputStream类创建字节流对象读取文件,使用BufferedReader类创建字符流对象读取文本文件。
  2. 打开连接:打开与外部设备的连接,例如使用open()方法打开文件。
  3. 读取数据:通过输入流对象读取数据。在读取数据时,可以使用输入流提供的方法逐个读取字节或字符,也可以使用输入流的读取方法一次读取多个字节或字符。
  4. 关闭连接:关闭与外部设备的连接,例如使用close()方法关闭文件。


输出流


Java中的输出流是一种用于将数据写入到外部设备的机制。它提供了一组类和接口,用于将数据从Java程序输出到不同的目标,如文件、网络连接、控制台等。


Java中的输出流主要分为以下几种类型:

  1. 字节流(Byte Stream):以字节为单位进行读写操作的流。常见的字节流类包括OutputStream和Writer。
  2. 字符流(Character Stream):以字符为单位进行读写操作的流。常见的字符流类包括Writer和OutputStream。
  3. 字符流(Character Stream):以字符为单位进行读写操作的流。常见的字符流类包括Writer和OutputStream。
  4. 字符流(Character Stream):以字符为单位进行读写操作的流。常见的字符流类包括Writer和OutputStream。
  5. 字符流(Character Stream):以字符为单位进行读写操作的流。常见的字符流类包括Writer和OutputStream。


使用输出流进行数据写入的一般步骤如下:

  1. 创建输出流对象:根据需要创建相应的输出流对象,例如使用FileOutputStream类创建字节流对象写入文件,使用PrintWriter类创建字符流对象写入文本文件。
  2. 创建输出流对象:根据需要创建相应的输出流对象,例如使用FileOutputStream类创建字节流对象写入文件,使用PrintWriter类创建字符流对象写入文本文件。
  3. 写入数据:通过输出流对象将数据写入到外部设备。在写入数据时,可以使用输出流提供的方法逐个写入字节或字符,也可以使用输出流的写入方法一次写入多个字节或字符。
  4. 关闭连接:关闭与外部设备的连接,例如使用close()方法关闭文件。

需要注意的是: 在使用输入输出流进行数据读取时,应该遵循“打开-使用-关闭”的原则,及时关闭连接以释放资源。同时,应该根据实际需求选择合适的流类,以达到最佳的读写效果。



File类


Java中的File类是用于文件和目录操作的类。它提供了一种在Java程序中创建、读取、写入和删除文件的方式。
File类主要用于对文件增删查的操作,没有用于对文件内部数据的读写功能。

File类的主要功能包括:

  1. 创建文件或目录:可以使用File类的构造函数创建一个新的文件或目录。例如,File file = new File(“path/to/file.txt”)将创建一个名为file.txt的文件。如果文件已经存在,则不会创建新文件。
  2. 判断文件或目录是否存在:可以使用File类的exists()方法来判断文件或目录是否存在。如果文件或目录存在,则返回true,否则返回false。
  3. 获取文件或目录的属性:可以使用File类的各种方法获取文件或目录的属性,如文件名、文件大小、文件创建时间等。例如,getName()方法返回文件或目录的名称,length()方法返回文件的大小(以字节为单位),lastModified()方法返回文件最后修改的时间。
  4. 删除文件或目录:可以使用File类的delete()方法删除文件或目录。如果删除成功,则返回true,否则返回false。需要注意的是,如果文件或目录不存在,或者由于其他原因无法删除,则删除操作可能会失败。
  5. 获取文件或目录的路径:可以使用File类的getAbsolutePath()方法获取文件或目录的绝对路径。该路径是一个字符串,表示文件或目录在文件系统中的位置。
  6. 获取文件或目录的路径:可以使用File类的getAbsolutePath()方法获取文件或目录的绝对路径。该路径是一个字符串,表示文件或目录在文件系统中的位置。
  7. 获取文件或目录的名称:可以使用File类的getName()方法获取文件或目录的名称。例如,如果文件位于C:\Users\username\Documents\file.txt,则文件名将是file.txt。
  8. 创建文件夹:可以使用 mkdir() 或 mkdirs() 方法创建文件夹。 mkdir() 只创建最后一个不存在的父目录,而 mkdirs() 会创建所有不存在的父目录。
  9. 判断是否是文件:可以使用 isFile() 方法判断路径是否对应一个普通文件。如果是,返回 true;否则返回 false。
  10. 判断是否是目录:可以使用 isDirectory() 方法判断路径是否对应一个目录。如果是,返回 true;否则返回 false。
  11. 其他操作:File类还提供了一些其他的方法,如listFiles()方法返回一个包含指定目录下所有文件的数组,list()方法返回一个包含指定目录下所有文件和子目录的字符串数组等。

示例:输出某一文件夹中所有的文件信息(包括子文件夹):
需要注意的是,如果某个文件夹需要权限才能访问,那么使用File类的listFiles方法返回的是null,为了代码不出现错误,我们需要对此进行判断。

public static void main(String[] args) {
        out_data(new File("E:\\简历"));
    }
public static void out_data(File f){
    //获取文件名或文件夹名
    System.out.println("--------------"+f.getName()+"------------------");
    File[] files = f.listFiles();
    if(files == null) { return; }
    for(File ft : files){
        // 判断是否文件夹,是则继续往下递归
        if(ft.isDirectory()) { out_data(ft); }
        // 不是文件夹,则输出信息
        else{ System.out.println(ft.getName()); }
    }
    System.out.println("--------------"+f.getName()+"------------------");
}

运行结果
在这里插入图片描述



文件输入 / 输出流


Java中的文件输入输出流是用于读取和写入文件的类。Java提供了两种类型的文件输入输出流:字节输入输出流和字符输入输出流。
二者的区别在于,字节流是以字节为单位进行读取,随读随取,可以读取除文本外任意文件;字符流也是以字节进行读取,但是不同点在于它遇到中文时会按中文的编码方式进行读取,而带有缓冲区机制。

字节输入输出流

字节输入输出流以字节为单位进行读写操作。Java中提供了以下几种字节输入输出流类:

  1. FileInputStream:用于从文件中读取字节数据。
  2. FileOutputStream:用于向文件中写入字节数据。
  3. BufferedInputStream:用于从文件中读取数据,并将数据缓存在内存中,以提高读取效率。
  4. BufferedOutputStream:用于向文件中写入数据,并将数据缓存在内存中,以提高写入效率。
  5. DataInputStream:用于从文件中读取基本数据类型,如int、float、double等。
  6. DataOutputStream:用于向文件中写入基本数据类型,如int、float、double等。


使用字节输入输出流进行文件读写的一般步骤如下:

  1. 创建输入输出流对象:使用上述类之一的构造函数创建输入输出流对象。例如,使用FileInputStream类创建文件输入流对象,使用FileOutputStream类创建文件输出流对象。
  2. 打开连接:使用open()方法打开文件,建立与文件的连接。
  3. 读取/写入数据:使用输入输出流提供的方法读取或写入数据。例如,使用read()方法从输入流中读取字节数据,使用write()方法向输出流中写入字节数据。
  4. 关闭连接:使用close()方法关闭文件,断开与文件的连接。


示例:读取文件

import java.io.FileInputStream;  
import java.io.IOException;  
  
public class FileReadingExample {  
    public static void main(String[] args) {  
        try (FileInputStream fileInputStream = new FileInputStream("path/to/file.txt")) {  
            int data;  
            while ((data = fileInputStream.read()) != -1) {  
                System.out.print((char) data);  
            }  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
}

示例:写入文件

import java.io.FileOutputStream;  
import java.io.IOException;  
  
public class FileWritingExample {  
    public static void main(String[] args) {  
        try (FileOutputStream fileOutputStream = new FileOutputStream("path/to/file.txt")) {  
            String data = "Hello, World!";  
            fileOutputStream.write(data.getBytes());  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
}


字符输入输出流

字符输入输出流以字符为单位进行读写操作。

Java中提供了以下几种字符输入输出流类:

  • FileReader:用于从文件中读取字符数据。
  • FileWriter:用于向文件中写入字符数据。
  • BufferedReader:用于从文件中读取数据,并将数据缓存在内存中,以提高读取效率。
  • BufferedWriter:用于向文件中写入数据,并将数据缓存在内存中,以提高写入效率。
  • BufferedWriter:用于向文件中写入数据,并将数据缓存在内存中,以提高写入效率。


使用字符输入输出流进行文件读写的一般步骤如下:

  • 创建输入输出流对象:使用上述类之一的构造函数创建输入输出流对象。例如,使用FileReader类创建文件输入流对象,使用FileWriter类创建文件输出流对象。
  • 打开连接:使用open()方法打开文件,建立与文件的连接。
  • 读取/写入数据:使用输入输出流提供的方法读取或写入数据。例如,使用read()方法从输入流中读取字符数据,使用write()方法向输出流中写入字符数据。
  • 关闭连接:使用close()方法关闭文件,断开与文件的连接。


示例:读取文件

import java.io.FileReader;  
import java.io.IOException;  
  
public class FileReadingExample {  
    public static void main(String[] args) {  
        try (FileReader fileReader = new FileReader("path/to/file.txt")) {  
            int data;  
            while ((data = fileReader.read()) != -1) {  
                System.out.print((char) data);  
            }  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
}


示例:写入文件

import java.io.FileWriter;  
import java.io.IOException;  
  
public class FileWritingExample {  
    public static void main(String[] args) {  
        try (FileWriter fileWriter = new FileWriter("path/to/file.txt")) {  
            String data = "Hello, World!";  
            fileWriter.write(data);  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
}


End

需要注意的是,在进行io读取操作时,应该遵循“打开-使用-关闭”的原则,及时关闭连接以释放资源。同时,应该根据实际需求选择合适的流类,以达到最佳的读写效果。

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

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

相关文章

SSM - Springboot - MyBatis-Plus 全栈体系(三十四)

第八章 项目实战 四、后台功能开发 1. 用户模块开发 1.1 jwt 和 token 介绍 1.1.1 token 介绍 令牌(Token):在计算机领域,令牌是一种代表某种访问权限或身份认证信息的令牌。它可以是一串随机生成的字符或数字,用…

git创建与合并分支

文章目录 创建与合并分支分支管理的概念实际操作 解决冲突分支管理策略Bug分支Feature分支多人协作 创建与合并分支 分支管理的概念 分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码&#xf…

jdk21的外部函数和内存API(官方翻译)

1、jdk21: 引入一个 API,通过该 API,Java 程序可以与 Java 运行时之外的代码和数据进行互操作。通过有效地调用外部函数(即JVM外部的代码)和安全地访问外部内存(即不由JVM管理的内存)&#xf…

一种基于HTTPS实现的Web账号登录Linux桌面系统的实现方案

问题由来 客户需求计划列入支持第三方帐号系统,包括Web账号。需求来源是用户想要用它们的帐号直接登录Linux Deepin操作系统。一个失败的实现方案是用户以较小的成本改造帐号管理系统发布HTTP服务,我们开发一个PAM模块与Web服务器交互,数据格…

基于天鹰优化的BP神经网络(分类应用) - 附代码

基于天鹰优化的BP神经网络(分类应用) - 附代码 文章目录 基于天鹰优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.天鹰优化BP神经网络3.1 BP神经网络参数设置3.2 天鹰算法应用 4.测试结果:5.M…

2023年【广东省安全员A证第四批(主要负责人)】考试试卷及广东省安全员A证第四批(主要负责人)模拟考试

题库来源:安全生产模拟考试一点通公众号小程序 广东省安全员A证第四批(主要负责人)考试试卷根据新广东省安全员A证第四批(主要负责人)考试大纲要求,安全生产模拟考试一点通将广东省安全员A证第四批&#x…

小程序之后台数据动态交互及WXS的使用 (5)

⭐⭐ 小程序专栏:小程序开发专栏 ⭐⭐ 个人主页:个人主页 目录 一.前言 二.后台数据交互 2.1 准备工作 2.1 前台首页数据连接: 三.WXS的使用 今天就分享到这啦!!! 一.前言 本文章续前面的文章的前端界面…

【JUC系列-15】深入理解CompletableFuture的基本使用

JUC系列整体栏目 内容链接地址【一】深入理解JMM内存模型的底层实现原理https://zhenghuisheng.blog.csdn.net/article/details/132400429【二】深入理解CAS底层原理和基本使用https://blog.csdn.net/zhenghuishengq/article/details/132478786【三】熟练掌握Atomic原子系列基本…

2023 10月8日 至 10 月16日学习总结

1.做的题目 [RootersCTF2019]I_<3_Flask_双层小牛堡的博客-CSDN博客 [NCTF2019]SQLi regexp 盲注-CSDN博客 [网鼎杯 2018]Comment git泄露 / 恢复 二次注入 .DS_Store bash_history文件查看-CSDN博客 PHP LFI 利用临时文件Getshell_双层小牛堡的博客-CSDN博客 …

《动手学深度学习 Pytorch版》 9.7 序列到序列学习(seq2seq)

循环神经网络编码器使用长度可变的序列作为输入,将其编码到循环神经网络编码器固定形状的隐状态中。 为了连续生成输出序列的词元,独立的循环神经网络解码器是基于输入序列的编码信息和输出序列已经看见的或者生成的词元来预测下一个词元。 要点&#x…

关于使用 vxe-table 时设置了 show-overflow tooltip 不展示的问题(Dialog 组件和 table 同时使用)

众所周知,vxe-table 是可以支撑万级数据渲染的表格组件,本质上还是用了虚拟滚动的实现。之前一直知道vxe-table, 但是基本没有机会用的上这个组件,最近在开发埋点数据的统计,后端一次性返回了上千条数据,elementui 的 …

【Shell】环境变量 自定义变量 特殊变量

Shell变量:环境变量 目标 1、理解什么是系统环境变量? 2、掌握常用的系统环境变量都有哪些? Shell变量的介绍 变量用于存储管理临时的数据, 这些数据都是在运行内存中的. 变量类型 系统环境变量 自定义变量 特殊符号变量 系统环境变…

golang查看CPU使用率与内存及源码中的//go:指令

golang查看CPU使用率与内存 1 psutil 1.1 概念与应用场景 psutil是业内一个用于监控OS资源的软件包,目前已经多种语言,包括但不限于Python、Go。 gopsutil是 Python 工具库psutil 的 Golang 移植版,可以帮助我们方便地获取各种系统和硬件信…

基于Java的实验室设备管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

如何在电脑上设置新的蓝牙耳机

本文介绍如何将蓝牙耳机连接到Windows或Mac电脑。 如何在Windows上设置新的蓝牙耳机 蓝牙耳机的设置过程因平台而异,但以下是Windows 11的步骤: 1、选择“开始”,然后在搜索框中输入蓝牙,以显示蓝牙和其他设备。 2、选择添加设…

【LeetCode:2316. 统计无向图中无法互相到达点对数 | BFS + 乘法原理】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

施密特正交化

相信大家在平时的期末考试中一定少不了对某某向量组执行标准正交化类型的题目。今天我们从这个题目入手,说明这个如何执行施密特正交化,以及为什么要进行正交化。 一、例子 例子:设 a 1 [ 1 2 − 1 ] a_1\begin{bmatrix}1\\2\\-1\end{bmat…

阿里妈妈Union Lab全量公测,你会用吗?

Union Lab是一种智能化的选品推荐、推广内容创作工具,它内置了大语言模型(LLMs),使得选品、推广更加智能和简单。通过联盟底层货品服务,Union Lab可以实现智能化货品发现、分析、选品、投放、创意生产,基于…

嵌入式mqtt总线架构方案mosquitto+paho

一 mqtt通信模型 MQTT 协议提供一对多的消息发布&#xff0c;可以降低应用程序的耦合性&#xff0c;用户只需要编写极少量的应用代码就能完成一对多的消息发布与订阅&#xff0c;该协议是基于<客户端-服务器>模型&#xff0c;在协议中主要有三种身份&#xff1a;发布者&…

力扣第37题 解数独 c++ 难~ 回溯

题目 37. 解数独 困难 相关标签 数组 哈希表 回溯 矩阵 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫…