关于java.io的学习记录(读取文本)

news2024/11/18 23:24:49

 可以通过字节流(FileInputStream)、字符流(InputStreamReader)、字符缓冲流(BufferedReader)读取文本中的数据。

1、FileInputStream读取文本

    public void read(){
        String path = "fileTest.txt";
        FileInputStream in = null;
        try {
             in = new FileInputStream(path);
            byte[] temp = new byte[10] ;
            int len;
            StringBuffer sb = new StringBuffer();
            // 文件中有中文时会乱码
            while ((len=in.read(temp))!=-1){
                String s = new String(temp, 0, len);
                sb.append(s);
                System.out.println("--------[-" + String.valueOf(s) + "-]----");
            }
            System.out.println();
            System.out.println(sb.toString());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(in!= null){
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

 运行说明:

1)出现乱码(文本是GBK的,程序默认是utf-8)

2)按照设置的字符长度,一段段的输出(据说实际上是一个个字节的读取,效率比较低)

其他:

字节流可以处理所有的数据类型,例如图片、视频、文本

 InputStreamReader读取文本

    public void read2(){
        String path = "fileTest.txt";
        FileInputStream in = null;
        InputStreamReader inputStreamReader = null;
        try {
            in = new FileInputStream(path); // 字节流
            inputStreamReader = new InputStreamReader(in, "GBK"); // 字符流
            char[] temp = new char[20];
            int len;
            StringBuffer sb = new StringBuffer();
            while ((len = inputStreamReader.read(temp)) != -1){
                String s = new String(temp, 0, len);
                sb.append(s);
                System.out.println("--------[-" + String.valueOf(s) + "-]----");
            }
            System.out.println();
            System.out.println(sb.toString());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(in!= null){
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(inputStreamReader != null){
                try {
                    inputStreamReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

运行说明:

1)InputStreamReader可以设置编码格式,读取中文时可以正常显示

2)按照设置的字符长度,一段段的输出(据说实际上是一个个字符的读取)

其他:

字符流只能处理文本数据

  BufferedReader读取文本

    public void read3(){
        String path = "fileTest.txt";
        FileInputStream in = null;
        InputStreamReader inputStreamReader = null;
        BufferedReader reader = null;
        try {
            in = new FileInputStream(path); // 字节流
            inputStreamReader = new InputStreamReader(in, "GBK"); // 字符流
            reader = new BufferedReader(inputStreamReader); // 字符缓冲流
            StringBuffer sb = new StringBuffer();
            char[] temp = new char[20];
            int len;
            while ((len = reader.read(temp)) != -1){
                String s = new String(temp, 0, len);
                sb.append(s);
                System.out.println("--------[-" + String.valueOf(s) + "-]----");
            }
            System.out.println();
            System.out.println(sb.toString());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(in!= null){
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(inputStreamReader != null){
                try {
                    inputStreamReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(reader != null){
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

 运行说明:

1)BufferedReader包裹了InputStreamReader,所以中文也能正常显示

2)从打印的结果看,跟InputStreamReader的效果一样(据说BufferedReader更快)

3)reader创建公式

xxInputStream in = ....
InputStreamReader  iReader = new InputStreamReader(in);
BufferedReader reader = new BufferedReader(iReader);

   BufferedReader读取文本,按行读取

...
StringBuffer sb = new StringBuffer();
String temp;
while ((temp = reader.readLine()) != null){
	sb.append(temp);
	System.out.println("--------[-" + temp + "-]----");
}
System.out.println();
System.out.println(sb.toString());
...

 运行说明:

1)一行行的读取,读取的数据中不包含\n、\r

2)据说没有数据时会断,在数据流异常或者断开时才会返回null

 读取文本异常

char[] temp = new char[20];
int len;
StringBuffer sb = new StringBuffer();
while ((len = inputStreamReader.read(temp)) != -1){
	sb.append(temp);
	System.out.println("-len=[" + len + "]-[-" + String.valueOf(temp) + "-]----");
}
System.out.println();
System.out.println(sb.toString());

运行说明:

1)最后一次读取的时候,残留了上一次的数据。观看源码,read的时候,是一个个char修改的,当i到16的时候,已经没有数据,则返回结果,此时17到19这三个char没有被处理,所以保存数据的时候,要用new String(temp, 0, len)截取数据

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

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

相关文章

浅测SpringBoot环境中使用WebSocket(多端实时通信)

目录 概述 测试:前端代码 后端代码(SpringBoot环境) 1.创建处理器类(用于处理连接和消息) 2.创建配置类(用于注册处理器类,开启WebSocket) 连接测试 概述 这篇博客主要是记录测试…

怎么将图片变成圆角矩形,2种方法可供选择

怎么将图片变成圆角矩形?我们在一些职场工作中,可能会遇到需要把图片变成圆角矩形的这样的要求,我们能够理解公司或领导,这样要求的用意是为了让我们的图片展示更加美观整齐,让我们的用户让我们的客户看起来更加美丽整…

android:手搓一个即时消息聊天框(包含消息记录)

先看一下效果 1.后端 要实现这个,先说一下后端要实现的接口 1.创建会话id 传入“发送id”和“接收id”给服务端,服务端去创建“会话id” 比如 get请求:http://xxxx:8110/picasso/createSession?fromUserId1&toUserId2 返回seesionId…

RabbitMQ防止消息丢失

生产者没有成功把消息发送到MQ 丢失的原因 :因为网络传输的不稳定性,当生产者在向MQ发送消息的过程中,MQ没有成功接收到消息,但是生产者却以为MQ成功接收到了消息,不会再次重复发送该消息,从而导致消息的丢…

直播授课在线课堂学习平台的设计与实现nodejs+vue

在各学校的教学过程中,直播授课管理是一项非常重要的事情。随着计算机多媒体技术的发展和网络的普及,“基于网络的学习模式”正悄无声息的改变着传统的直播学习模式,“基于网络的直播教学平台”的研究和设计也成为教育技术领域的热点课题。1、…

金融数据获取:获取网站交互式图表背后的数据,Headers模拟浏览器请求,防盗链破解及Cookie验证

有时候写爬虫难免会遇上只提供一张图表却没有背后结构化数据的情况,尤其是金融市场数据,例如股票K线,基金净值等。笔者看了市面上主流的行情网站,基本都是图一这样的交互式图表,但这样的图表是没有办法直接拿到原始数据…

前端技术学习第八讲:VUE基础语法---初识VUE

VUE基础语法—初识VUE 一、初识VUE Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库…

如何快速白嫖一个SSL证书

首先呢,还是要非常感谢各大云厂商能够为白嫖党免费提供申请SSL证书的这个一个平台。 SSL证书作用不在描述,自行百度? 本篇主要从百度云、腾讯云、阿里云讨论下 阿里云 地址:阿里云-计算,为了无法计算的价值 首先需…

手写axios源码系列三:dispatchRequest发送请求

文章目录 一、dispatchRequest 发送请求代码设计思路1、创建 dispatchRequest.js 文件2、创建 adapters.js 文件3、创建 xhr.js 文件4、总结 上篇文章中介绍了创建 axios 函数对象的思路,在 Axios 的原型对象上声明了一个 request 方法,在 request 方法中…

基于Java+Springboot+vue在线版权登记管理系统设计实现

基于JavaSpringbootvue在线版权登记管理系统设计实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文…

亚马逊云科技在上云旅程中不断调整和优化成本管理计划

亚马逊云科技的云财务管理旨在帮助企业建立一个成功的CFM战略:通过4个云财务管理CFM原则或步骤作为路线图:SEE-查看、SAVE-保存、PLAN-计划和RUN-运行。 对现有工作负载的预测和规划 1、 优化计算资源与架构: 与技术业务相关部门合作&…

Notion打不开

如果Notion打不开,可以尝试以下方法:1. 尝试Ping一下Notion的服务器,如果是正常的,但访问502了,那么很可能是DNS污染了。建议将DNS修改为114.114.114.114,再加个8.8.8.8,修改完成后再度访问Noti…

doccano使用记录

参考文章:https://github.com/PaddlePaddle/PaddleNLP/blob/develop/model_zoo/uie/doccano.md 参考文章:https://github.com/doccano/doccano 参考文章:https://doccano.github.io/doccano/ 参考文章:https://zhuanlan.zhihu.com…

06 | 立迈胜电机使用问题汇总

1 前提 使用STM2832B-485-MA-0FS等 2 常见问题 2.1 操作相关 问题1:怎么识别到电机设备 解决方法: 1、电机上电,在通讯处,点击【打开】 2、设备类型选择【串口】 3、选择串口选择【对应的COM】 4、选择对应的波特率 问题2…

python 的 object 与type的关系

python 的 object 与type的关系 是并列关系&#xff0c;两种是相互依赖的 查询父类 type.__bases__ object.__bases__(<class ‘object’>,) () 查询类型 type(type) type(object)<class ‘type’> <class ‘type’> 在python中&#xff0c;type用于描述…

Docker之Docker网络

Docker网络 1. 理解Docker01.1 测试1.2 原理1.3 小结 2. -link3. 自定义网络3.1 网络模式3.2 测试3.3 自定义网络 4. 网络连通5. 实战&#xff1a;部署Redis集群6. 总结 1. 理解Docker0 清空所有环境 docker rm -f $(docker ps -aq) docker rmi -f $(docker images -aq)1.1 测…

51.现有移动端开源框架及其特点—PocketFlow-1

51.1 简介 全球首个自动模型压缩框架一款面向移动端AI开发者的自动模型压缩框架,集成了当前主流的模型压缩与训练算法,结合自研超参数优化组件实现了全程自动化托管式的模型压缩与加速。 开发者无需了解具体算法细节,即可快速地将AI技术部署到移动端产品上,实现了自动托管式…

Java项目打包exe运行文件

Java项目打包exe运行文件 JavaSE打包成exe运行文件的方法有很多种&#xff0c;此处我们主要讲解我常用的一种exe4j&#xff0c;打包前我们需要先安装exe4j这个工具。 注意&#xff1a;exe4j仅支持最低JDK1.8最高JDK11&#xff0c;所以在安装之前一定要查看自己的JDK版本&#…

银行数字化转型导师坚鹏:数字化时代普惠金融模式和产品创新

数字化时代普惠金融模式和产品创新 课程背景&#xff1a; 很多银行存在以下问题&#xff1a; 不清楚普惠金融的机遇与挑战&#xff1f; 不知道普惠金融模式和产品如何创新&#xff1f; 不知道普惠金融产品创新的成功案例&#xff1f; 课程特色&#xff1a; 用实战案例…

使用Docker安装Zookpeer集群

1&#xff09;需要提前安装python和docker-compose 注&#xff1a;sudo权限看自己机器的权限 安装python-pip&#xff1a;sudo yum -y install epel-releasesudo yum -y install python-pip安装docker-compose&#xff1a;sudo pip install docker-compose 注意在安装过程中很…