JavaSE 文件内容的读写

news2024/11/18 14:01:21

读文件和写文件有俩种风格的操作(俩组不同的类)

  • 字节流 InputStream(负责读)/ OutputStream (负责写)~~针对二进制文件进行读写,操作基本单位是字节。
  • 字符流 Reader(负责读)/ Writer(负责写) ~~针对文本文件进行读写,操作进本单位是字符。

 

InputStream 概述

方法

说明

InputStream 只是一个抽象类,要使用还需要具体的实现类。关于 InputStream 的实现类有很多,基本可以认为不同的输入设备都可以对应一个 InputStream 类,我们现在只关心从文件中读取,所以使用 FileInputStream

FileInputStream 概述

构造方法



代码示例

示例1

将文件完全读完的两种方式。相比较而言,后一种的 IO 次数更少,性能更好。

第一种:
 

package file;

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

public class Test8 {
    public static void main(String[] args) {
        //try with resources 把要释放的资源,放到try()然后就会自动调用到关闭 无论是否异常
        //要求try()里面的对象能够实现Closeable接口
        try (InputStream inputStream = new FileInputStream("test/test.txt")) {
            int b;
            while (true) {
                b = inputStream.read();
                if (b == -1) {
                    break;
                }
                System.out.printf("%c", b);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}



 第二种

package file;

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

public class Test9 {
    public static void main(String[] args) {
        try (InputStream inputStream = new FileInputStream("test/test.txt")) {
            int len;
            byte[] buf = new byte[1024];
            while (true) {
                len = inputStream.read(buf);
                if (len == -1) {
                    break;
                }
                for (int i = 0; i < len; i++) {
                    System.out.printf("%c", buf[i]);
                }
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

 

示例2

package file;

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

public class Test10 {
    public static void main(String[] args) {
        try (InputStream inputStream = new FileInputStream("test/test.txt")) {
            int len;
            byte[] buffer = new byte[1024];
            while (true) {
                len = inputStream.read(buffer);
                if (len == -1) {
                    break;
                }
                String s = new String(buffer, 0, len, "utf-8");
                System.out.println(s);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}


 

 利用 Scanner 进行字符读取

上述例子中,我们看到了对字符类型直接使用 InputStream 进行读取是非常麻烦且困难的,所以,我们使用一种我们之前比较熟悉的类来完成该工作,就是 Scanner 类。使用scanner相当于使用字符来读。

package file1;

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

public class Test1 {
    public static void main(String[] args) {
        try (InputStream inputStream = new FileInputStream("test/test.txt")) {
            try (Scanner scanner = new Scanner(inputStream, "utf-8")) {
                while (scanner.hasNext()) {
                    String s = scanner.next();
                    System.out.println(s);
                }
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

 

 OutputStream 概述

方法


 

说明

OutputStream 同样只是一个抽象类,要使用还需要具体的实现类。我们现在还是只关心写入文件中,所以使用 FileOutputStream

利用 OutputStreamWriter 进行字符写入

示例1:

package file1;

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

public class Test3 {
    public static void main(String[] args) {
        try (OutputStream outputStream = new FileOutputStream("test/test.txt")) {
            outputStream.write('H');
            outputStream.write('e');
            outputStream.write('l');
            outputStream.write('l');
            outputStream.write('o');
            outputStream.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

示例2: 

package file1;

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

public class Test4 {
    public static void main(String[] args) {
        try (OutputStream outputStream = new FileOutputStream("test/test.txt")) {
            byte[] bytes = new byte[]{(byte) 'H', (byte) 'a', (byte) 'H', (byte) 'a'};
            outputStream.write(bytes);
            outputStream.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

示例3:

package file1;

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

public class Test5 {
    public static void main(String[] args) {
        try (OutputStream outputStream = new FileOutputStream("test/test.txt")) {
            byte[] bytes = new byte[]{(byte) 'C', (byte) 'H', (byte) 'I', (byte) 'N', (byte) 'A'};
            outputStream.write(bytes, 0, 4);
            outputStream.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


示例4:

package file1;

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

public class Test6 {
    public static void main(String[] args) {
        try (OutputStream outputStream = new FileOutputStream("test/test.txt")) {
            String s = "nothing";
            byte[] b = s.getBytes();
            outputStream.write(b);
            outputStream.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


示例5:

package file1;

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

public class Test7 {
    public static void main(String[] args) {
        try (OutputStream outputStream = new FileOutputStream("test/test.txt")) {
            String s = "百骑劫魏营,功震天下英!";
            byte[] b = s.getBytes("utf-8");
            outputStream.write(b);
            outputStream.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


利用 PrintWriter 找到我们熟悉的方法

上述,我们其实已经完成输出工作,但总是有所不方便,我们接来下将 OutputStream 处理下,使用PrintWriter 类来完成输出,因为PrintWriter 类中提供了我们熟悉的 print/println/printf 方法

示例

package file1;

import java.io.*;

public class Test8 {
    public static void main(String[] args) {
        try (OutputStream outputStream = new FileOutputStream("test/test.txt")) {
            try (OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream, "utf-8")) {
                try (PrintWriter writer = new PrintWriter(outputStreamWriter)) {
                    writer.println("我是第一行!");
                    writer.print("我是第二行!\n");
                    writer.printf("我是第%d行!\n", 3);
                    writer.flush();
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

  

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

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

相关文章

vue初识

第一次接触vue&#xff0c;前端的html,css,jquery,js学习也有段时间了&#xff0c;就照着B站的视频简单看了一些&#xff0c;了解了一些简单的用法&#xff0c;这边做一个记录。 官网 工具&#xff1a;使用VSCode以及Live Server插件&#xff08;能够实时预览&#xff09; 第…

【龙芯1B】:LCD显示图片文字背景色前景色、小创语音控制lcd显示、数码管倒计时

项目场景&#xff1a; 闲来无事&#xff0c;写了几个关于嵌入式技能大赛的任务。希望对大家有所帮助。本文开发板由百科荣创的龙芯1b开发板支持&#xff0c;关于嵌入式技能大赛的开发板。 LCD显示图片&文字&背景色&前景色小创语音控制lcd显示数码管倒计时LCD显示图…

创建自己的脚手架(一)

创建自己的脚手架 脚手架基本框架 使用pnpm init 创建环境 取一个自己喜欢的名字 这里叫gucli 生成 package.json文件的内容 {"name": "gucli","version": "1.0.0","description": "","main": "…

【JavaSE】Java9Java10Java11新特性(687~717)

687.复习&#xff1a;动态代理 688.复习&#xff1a;Lambda表达式 689.复习&#xff1a;函数式接口 690.复习&#xff1a;方法引用与构造器引用 691.复习&#xff1a;Stream API 692.复习&#xff1a;Optional类的使用 693.jdk版本更新说明 JDK 9 的发布 经过4次跳票&#x…

Leetcode力扣秋招刷题路-0074

从0开始的秋招刷题路&#xff0c;记录下所刷每道题的题解&#xff0c;帮助自己回顾总结 74. 搜索二维矩阵 编写一个高效的算法来判断 m x n 矩阵中&#xff0c;是否存在一个目标值。该矩阵具有如下特性&#xff1a; 每行中的整数从左到右按升序排列。 每行的第一个整数大于前…

《MySQL学习》 事务的隔离

一.快照读与当前读 众所周知,MySQL默认的隔离级别为可重复读&#xff08;RR&#xff09;&#xff0c;开启一致性视图后&#xff0c;事务提交前后数据都是不变的。 事务 T 启动的时候会创建一个视图 read-view&#xff0c;之后事务 T 执行期间&#xff0c;即使有其他事务修改了…

数值卡,让数据可视化玩出新花样丨三叠云

数值卡 路径 仪表盘 >> 仪表盘设计 功能简介 1. 数值卡增加「数值标题」、「图标」、「进度条」功能&#xff0c;使得应用场景更为广泛&#xff0c;实现数据可视化&#xff0c;让用户能够轻松地获取、处理信息。 2.「数据模型」支持0个维度1个指标、1个维度1个指标。…

EMC简介(文末有易灵思核心板)

EMC测试又叫做电磁兼容&#xff08;EMC&#xff09;&#xff0c;指的是对电子产品在电磁场方面干扰大小&#xff08;EMI&#xff09;和抗干扰能力&#xff08;EMS&#xff09;的综合评定&#xff0c;是产品质量最重要的指标之一&#xff0c;电磁兼容的测量由测试场地和测试仪器…

嵌入式Linux文件系统的介绍

学习Linux都是跟文件打交道&#xff0c;却不知道文件系统下的目录存放的内容&#xff0c;有点说不过去&#xff0c;特意准备了这篇文章供大家阅读&#xff0c;哪怕有一点点帮助&#xff0c;都是对我的鼓励。 根文件系统一般应该比较小&#xff0c;因为包括严格的文件和一个小的…

手机子品牌的“性能战事”:一场殊途同归的大混战

在智能手机行业进入存量市场后&#xff0c;竞争更加白热化。当各国产手机品牌集体冲高端&#xff0c;旗下子品牌们也正厮杀正酣&#xff0c;显现出刀光剑影。处理器、屏幕、内存、价格等各方面无不互相对标&#xff0c;激烈程度并不亚于高端之争。源于OPPO的中端手机品牌realme…

input专题--独占事件

最近在群里聊天&#xff0c;遇到一个哥们描述的一个问题&#xff1a; 大家好&#xff0c;请教一个关于文件的问题。有几个进程打开了/dev/input 设备&#xff0c;都可以收到数据&#xff0c;又来了一个进程x&#xff0c;打开了这个设备&#xff0c;不知道采用了什么方式&#…

C++框架学习一:朴实无华的高性能RPC框架推荐

一个高性能的RPC框架&#xff1a; 介绍&#xff1a; 框架特性 操作系统&#xff1a;Linux编程语言&#xff1a;C14完全独立&#xff1a;不依赖任何第三方库高性能&#xff1a;微秒级响应高并发&#xff1a;单机百万连接IO多路复用&#xff1a;epoll连接池线程池用法简单 服…

快速入门nginx

目录 1.nginx前言 2.什么是nginx 3.Nginx作用&#xff1f; 1.正向代理 2.反向代理 3.轮询 4.加权轮询 4.Nginx的安装 1.windows下安装 2.linux下安装 5.Nginx常用命令 1.nginx前言 我们公司项目刚刚上线的时候&#xff0c;并发量小&#xff0c;用户使用的少&#…

使用和制作动、静态库

文章目录什么是库&#xff1f;静态库打包方式使用方式生成并执行可执行程序粗暴方式优化方式动态库不一样的.o文件打包方式使用方式生成可执行程序运行可执行程序无法运行时的解决方案动静态库与动静态链接什么是库&#xff1f; 从一开始的helloworld&#xff0c;到现在熟练使…

SpringBoot项目中日志控制,配置logback(logback.xml的配置及介绍)

SpringBoot项目中日志控制&#xff0c;配置logback&#xff08;logback.xml的配置及介绍&#xff09;前言一、大致介绍logback依赖jar包logback的默认配置创建logback.xml配置文件仰天大笑出门去&#xff0c;我辈岂是蓬蒿人前言 SpringBoot项目中对日志的处理手动控制&#xf…

从 JavaScript 中的数组中删除空对象

从数组中删除空对象&#xff1a; 使用 Array.filter() 方法遍历数组。将每个对象传递给 Object.keys() 方法并检查键的长度是否不等于 0。filter 方法将返回一个不包含空对象的新数组。 const arr [{}, {id: 1}, {}, {id: 2}, {}];const results arr.filter(element > {…

scrum看板视图切换时间线视图做项目管理

企业需要开发一个项目&#xff0c;可以制作时间线进行管理&#xff0c;以便参与者和管理者了解项目的时间进度。项目进行到哪一步&#xff0c;参与者有哪些&#xff0c;责任人是谁&#xff0c;这些都可以通过时间线进行展示。「时间线视图」是一种比甘特图更轻量、更实用的工具…

Chapter6:机器人SLAM与自主导航

ROS1{\rm ROS1}ROS1的基础及应用&#xff0c;基于古月的课&#xff0c;各位可以去看&#xff0c;基于hawkbot{\rm hawkbot}hawkbot机器人进行实际操作。 ROS{\rm ROS}ROS版本&#xff1a;ROS1{\rm ROS1}ROS1的Melodic{\rm Melodic}Melodic&#xff1b;实际机器人&#xff1a;Ha…

【Spring Cloud Alibaba】001-单体架构与微服务架构

【Spring Cloud Alibaba】001-单体架构与微服务 文章目录【Spring Cloud Alibaba】001-单体架构与微服务一、单体架构1、单体应用与单体架构2、单体应用架构图3、单体架构优缺点优点缺点二、微服务1、微服务的“定义”2、微服务的特性3、微服务架构图4、微服务的优缺点优点缺点…

Python自动批量修改文件名称的方法大全

前言本文介绍基于Python语言&#xff0c;按照一定命名规则批量修改多个文件的文件名的方法。已知现有一个文件夹&#xff0c;其中包括班级所有同学上交的作业文件&#xff0c;每人一份&#xff1b;所有作业文件命名格式统一&#xff0c;都是地信1701_姓名_学习心得格式。现需要…