文件输入/输出流(I/O)

文章目录

  • 前言
  • 一、文件输入\输出流是什么?
  • 二、使用方法
    • 1.FileInputStream与FileOutputStream类
    • 2.FileReader与FileWriter类
  • 总结

前言

        对于文章I/O(输入/输出流的概述),有了下文。这篇文章将具体详细展述如何向磁盘文件中输入数据,或者读取磁盘文件中的信息。这样就不会在java程序运行结束后,数据消失了。


一、文件输入\输入流是什么?

        文件输入\输出流,是与指定的文件建立连接,将需要的数据永久保存到文件中,避免程序结束时的数据消失(当然也可以从文件中读取信息)。

二、使用方法

需要导入 java.io包

1.FileInputStream与FileOutputStream类

        构造方法:

File file = new File("word.txt");
//先创建一个文件对象
//实例化字节输入输出流时,引入参数File对象,实现对该File对象进行操作
new FileOutputStream(file);
//第二布尔参数为true,该流输入文件信息时,文件之前的信息不会消失
new FileOutputStream(file,true);


new FileInputStream(file);

        使用时有三点需要注意:

(1)字节输入\输出流的使用过程中需要创建byte字节数组来读存数据的。

(2)需要使用try-catch-finally语句抛出异常

(3)需要使用close()方法关闭输入\输出流

实操展示:

        项目:创建一个word.txt文件,使用FileOutputStream对象将文字输入进txt文件。同时使用FileInputStream对象将txt文件中存有的文字数据返回至终端。

import java.io.*;

public class PutStream{

    public static void main(String[] args) {
        File file = new File("word.txt");

        //输出数据到文件中
        FileOutputStream outputStream = null;
        try{
            outputStream = new FileOutputStream(file);
            String string = "君不见高堂明镜悲白发,朝如青丝暮成雪";
            byte b[] = string.getBytes();//字符串转换为字节数组
            outputStream.write(b);
        }catch(IOException e){
            e.printStackTrace();
        }finally{
            if(outputStream!=null){
                try{
                    outputStream.close();
                }catch(IOException e){
                    e.printStackTrace();
                }
            }
        }   
    
        //读取数据
        FileInputStream inputStream = null;
        try {
            inputStream = new FileInputStream(file);
            byte b2[] = new byte[1024]; 
            int len = inputStream.read(b2);
            //inputStream.read()返回int值文件中的字节数,len为文件字节流的字节数
            System.out.println("文件中的数据是:"+new String(b2,0,len));
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            if(inputStream!=null){ 
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

(1)若File对象创建时,没有对应的"word.txt",则会自动生成一个文件。

(2)实例化FileOutputStream和FileInputStream对象时需要抛出IOException。

(3)FileOutputStream对象write(byte[]),将byte数组内容写入到文件中。字符串对象通过getBytes()方法转化为字节数组储存。 

(4)FileInputStream对象read(byte[]),将读取文件的字节流保存在byte数组对象中,返回int值为文件字节流的字节长度。实例化new String(byte[],int1,int2) 为byte[]数组实例化为字符串,实例化长度从int1到int2。

(5)在Finally代码块中的close()方法,使用过程中需要使用try-catch语句抛出IOException异常。

运行结果: 

        如图,创建了一个word.txt,永久保存了输入的信息,并且将里面的信息也反馈到控制台中。 

2.FileReader与FileWriter类

        构造方法:

File file = new File("word.txt");
//先创建一个文件对象
//实例化字符输入输出流时,引入参数File对象,实现对该File对象进行操作
new FileWriter(file);
//第二布尔参数为true,该流输入文件信息时,文件之前的信息不会消失
new FileWriter(file,ture);


new FileReader(file);

        使用时有三点需要注意:

(1)字符输出流的使用过程中需要创建char字节数组来读取数据的。

(2)需要使用try-catch语句抛出异常

(3)需要使用close()方法关闭输入\输出流(不需要抛出异常)

实操展示:

        项目:创建一个word.txt文件,使用FileWriter对象将文字输入进txt文件。同时使用FileReader对象将txt文件中存有的文字数据返回至终端。

import java.io.*;

public class PutStream{

    public static void main(String[] args) {
        File file = new File("word.txt");

        //输出数据到文件中
        FileWriter writer = null;
        try{
            writer= new FileWriter(file);
            //字符串不用转换类型,直接写入即可
            String string = "人生得意须尽欢,莫使金樽空对月"; 
            writer.write(string);
            writer.close(); //字符流直接关闭就行,不需要try-catch抛出异常
        }catch(IOException e){
            e.printStackTrace();
        }
    
        //读取数据
        FileReader reader = null;
        try {
            reader = new FileReader(file);
            //需要使用的是char字符数组来保存,读取的文件数据
            char b2[] = new char[1024];
            int len = reader.read(b2);
            System.out.println("文件中的数据是:"+new String(b2,0,len));
            reader.close(); //直接关闭读取流
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

(1)若File对象创建时,没有对应的"word.txt",则会自动生成一个文件。

(2)实例化FileWriter和FileReader对象时需要抛出IOException。

(3)FileWriter对象write(String),将字符串内容写入到文件中。

(4)FileInputStream对象read(char[]),将读取文件的字节流保存在char数组对象中,返回int值为文件字节流的字节长度。实例化new String(char[],int1,int2) 为char[]数组实例化为字符串,实例化长度从int1到int2。

(5)close()方法,在最后处关闭数据流即可。


总结

        以上就是I\O中要讲的字节输入输出流,字符输入输出流的使用方法了,本文仅仅简单介绍了FileInputStream,FileOutputStream,FileReader,FileWriter的使用,而I\O提供了大量能使我们快速便捷地处理文件数据存读的函数和方法。

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

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

相关文章

【Android】apk安装报错:包含病毒: a.gray.BulimiaTGen.f

​ 有时候apk安装或者更新时,显示:[高风险]包含病毒: a.gray.BulimiaTGen.f这种bug; 原因:这是手机管家误报病毒。 处理方法:我看网上其他资料可以进行申诉,也可以进行apk加固,我这边尝试用360…

微信小程序制作圆形进度条

微信小程序制作圆形进度条 1. 建立文件夹 选择一个目录建立一个文件夹,比如 mycircle 吧,另外把对应 page 的相关文件都建立出来,包括 js,json,wxml 和 wxcc。 2. 开启元件属性 在 mycircle.json中开启 component 属…

数据结构与算法——字符串暴力匹配

一、字符串的组成 1.数据域,字符串的内容 2.字符串的长度 二、模式匹配-暴力匹配原理 1.两个字符串一个主串一个模式串用两个指针对其进行匹配 2、两个指针所对应的值相同时继续匹配下一个 3、当出现不匹配的情况时,回溯主串的指针到刚开始起点的下一个位…

大气负氧离子自动监测系统

TH-FZ4随着旅游旺季的到来,越来越多的人选择走出家门,感受大自然的魅力。然而,在享受美丽风景的同时,我们是否也关注到了身边空气质量的变化?今天,就让我们一起了解一种神奇的监测系统——大气负氧离子自动…

【STL】list的模拟实现

目录 前言 list概述 list的节点 list的迭代器 list的结构 构造与析构 拷贝构造与赋值 list的元素操作 insert() push_back() push_front() erase() pop_back() pop_front() clear() swap() size() 完整代码链接 前言 如果你对链表还不熟悉或者忘了的话…

手机银行客户端框架之mPaaS介绍

移动开发平台(Mobile PaaS,简称 mPaaS)是源于支付宝 App 的移动开发平台,为移动开发、测试、运营及运维提供云到端的一站式解决方案,能有效降低技术门槛、减少研发成本、提升开发效率,协助企业快速搭建稳定…

Harmony鸿蒙南向驱动开发-SPI

SPI即串行外设接口(Serial Peripheral Interface),是一种高速的,全双工,同步的通信总线。SPI是由Motorola公司开发,用于在主设备和从设备之间进行通信。 运作机制 在HDF框架中,SPI的接口适配模…

#5松桑前端后花园周刊-JavaScript引擎和JavaScript运行时之间的区别

行业动态 TC39 Signals 提案 一个早期提案:给 ECMAScript/JavaScript 带来一个新特性 signals,该提案从一系列流行的框架中引入了一些想法。提案解释 signals 是一种数据类型,它通过模拟状态单元和从其他状态/计算中派生的计算来实现单向数…

免费ssl证书能一直续签吗?如何获取SSL免费证书?

免费SSL证书是否可以一直续签。我们需要了解SSL证书的基本工作原理。当你访问一个使用HTTPS协议的网站时,该网站实际上在使用一个SSL证书。这个证书相当于一个数字身份证明,它验证了网站的真实性和安全性。而这个证明是由受信任的第三方机构——通常是证…

jvm中jdk常用的几个命令总结

1.jmap 此命令可以用来查询内存信息&#xff0c;实例个数及占用内存大小 1.1 查看堆内存概要信息&#xff08;内存分配统计&#xff09; jmap -histo[:live] <pid> .-histo&#xff1a;显示堆中对象的统计信息&#xff0c;包括每个类的实例数量、占用内存大小等 :live…

Vue+el-table 修改表格 单元格横线边框颜色及表格空数据时边框颜色

需求 目前 找到对应的css样式进行修改 修改后 css样式 >>>.el-table th.el-table__cell.is-leaf {border-bottom: 1px solid #444B5F !important;}>>>.el-table td.el-table__cell,.el-table th.el-table__cell.is-leaf {border-bottom: 1px solid #444B5F …

【开源社区】openEuler、openGauss、openHiTLS、MindSpore

【开源社区】openEuler、openGauss、openHiTLS、MindSpore 写在最前面开源社区参与和贡献的一般方式开源技术的需求和贡献方向 openEuler 社区&#xff1a;开源系统官方网站官方介绍贡献攻略开源技术需求 openGauss 社区&#xff1a;开源数据库官方网站官方介绍贡献攻略开源技术…

机器学习和深度学习--李宏毅 (笔记与个人理解)Day7

Day7 Regression Case study &#xff08;预测宝可梦的cp&#xff09; Regression 可以做什么&#xff1f; 股票预测 自动驾驶 推荐 预测宝可梦的cp&#xff08;能力类似这样的属性把&#xff09; 这里突然想到&#xff0c;是不是可以用洛克王国和赛尔号做事情哈哈 注意&#…

解决苹果iMac的M1芯片Node Sass does not yet support your current environment的问题

问题背景 如图所示&#xff0c;这是我的电脑&#xff0c;M1芯片 启动前端项目老是报错&#xff0c;说node Sass不支持我当前的环境&#xff0c;同事的macBook是intel芯片的&#xff0c;就能跑起项目来 很烦 但是不慌&#xff01;&#xff01;&#xff01; 咱有解决方法啦&a…

【C 数据结构】线性表

文章目录 【 1. 线性表 】【 2. 顺序存储结构、链式存储结构 】【 3. 前驱、后继 】 【 1. 线性表 】 线性表&#xff0c;全名为线性存储结构&#xff0c;线性表结构存储的数据往往是可以依次排列的&#xff08;不考虑数值大小顺序&#xff09;。 例如&#xff0c;存储类似 {1…

Visual Studio C++ 正确创建项目与更改文件名

1、创建项目 1&#xff09;打开Visual Studio&#xff0c;选择创建新项目。 2&#xff09;创建空项目 3&#xff09;配置新项目&#xff0c;注意不要勾选 " 将解决方案和项目放在同一目录中 " 。并将位置的文件夹设为与解决方案同名&#xff0c;方便管理。项目名称则…

客户关系CRM管理系统源码 企业crm管理系统

客户关系CRM管理系统源码 企业crm管理系统 系统功能介绍 1、 公海管理&#xff1a;公海类型、客户公海。 2、 线索管理&#xff1a;我的线索、线索列表、线索状态、线索来源。 3、 客户管理&#xff1a;我的客户、客户列表、成交客户、行业类别、预查、地区列表、客户状态、…

Docker Compose 一键安装

文章目录 一、场景说明二、脚本职责三、参数说明四、操作示例五、注意事项 一、场景说明 本自动化脚本旨在为提高研发、测试、运维快速部署应用环境而编写。 脚本遵循拿来即用的原则快速完成 CentOS 系统各应用环境部署工作。 统一研发、测试、生产环境的部署模式、部署结构、…

SOCKS代理是如何增强网络隐私?

在数字化时代&#x1f310;&#xff0c;网络隐私的重要性日益凸显。个人和组织都在寻找有效的方法来保护自己的网络活动不受侵犯。SOCKS代理作为一种流行的网络协议&#xff0c;提供了一种有效的手段来增强网络隐私。本文将详细介绍SOCKS代理是如何工作的&#xff0c;以及它是如…

BPMN.JS中文教程学习

基础篇 vue bpmn.js 建模BpmnModeler将数据转图形bpmnModeler.importXML // basic.vue<script>// 引入相关的依赖import BpmnModeler from bpmn-js/lib/Modelerimport {xmlStr} from ../mock/xmlStr // 这里是直接引用了xml字符串export default {name: ,components: {…