打印流、转换流、数据流 、随机访问流

news2025/2/27 9:35:57

Java知识点总结:想看的可以从这里进入

目录

    • 5、打印流
    • 6、转换流
    • 7、数据流
    • 8、随机访问流

5、打印流


实现将基本数据类型的数据格式转化为字符串输出,它们提供了一系列重载的print()和println()方法,用于多种数据类型的输出,这种流不会出现IOException异常。

  • PrintWriter:在Java的IO流中提供了字符输出的类PrintWriter,它具有自动刷新缓冲字符输出流,按行写出字符串,提供println()方法用于自动换行。

    PrintWriter fw = new PrintWriter(file);
    
  • PrintStream:在Java的IO流中提供了字节输出的类PrintStream,它打印的所有字符都使用平台的默认字符编码转换为字节。在需要写入字符而不是写入字节的情况下,应该使用 PrintWriter 类。

    System.out返回的是PrintStream的实例

    PrintStream printStream = new PrintStream(file);
    
public class Io {
    public static void main(String[] args) throws Exception{
        //创建文件对象
        File file1 = new File("d:/mydata/a.txt");
        File file2 = new File("d:/mydata/acopy.txt");

        try (FileReader fr = new FileReader(file1);
             BufferedReader in = new BufferedReader(fr);
             PrintWriter fw = new PrintWriter(file2);	//字符输出流
             ){
			String line;
            //一次读取一行,读到换行时结束
            while((line=in.readLine())!=null){
                fw.println(line);			//println直接换行,这种比使用文件字符流、缓冲字符流更方便
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

6、转换流


在Java中提供了将字节流转换成字符流的转换流,InputStreamReaderOutputStreamWriter。流在转换后,读取数据时会存在编码的问题。

计算机上显示的信息在计算机都是以二进制形式保存的,所以必须按照一定的规则将二进制数据解析并显示,如果规则不正确则会导致乱码问题。字符集 Charset:是一个系统支持的所有字符的集合,包括各国家文字、标点符号、图形符号、数字等。常见的字符集有ASCII、GBK、Unicode(常用的为UTF-8)等。

常见的编码表

ASCII:美国标准信息交换码。用一个字节的7位可以表示。

ISO8859-1:拉丁码表。欧洲码表用一个字节的8位表示。

GB2312:中国的中文编码表。最多两个字节编码所有字符

GBK:中国的中文编码表升级,融合了更多的中文文字符号。最多两个字节编码

Unicode:国际标准码,融合了目前人类使用的所有字符。为每个字符分配唯一的字符码。所有的文字都用两个字节来表示。

UTF-8:变长的编码方式,可用1-4个字节来表示一个字符。

在接收键盘输入System.in时,就是使用的转换流,将字节转换成字符流,再使用BufferedReader

  1. InputStreamReader:将InputStream转换为Reader
  2. OutputStreamWriter:将Writer转换为OutputStream
FileInputStream fis = new FileInputStream(file1);	//文件字节流
InputStreamReader is = new InputStreamReader(fis,"utf-8"); //将字节流转为字符流
BufferedReader in = new BufferedReader(is);        //再使用缓冲流

FileOutputStream fos = new FileOutputStream(file2);
OutputStreamWriter os = new OutputStreamWriter(fos,"utf-8");
BufferedWriter out = new BufferedWriter(os);

7、数据流


数据流(DataInputStream、DataOutputStream)专门用来操作基本数据类型,上述的字符流和字节流不能直接操作像long,float,double,boolean这些数据类型,而数据流对八种基本数据类型都可以操作。

数据流本身也属于一种字节流,属于处理流,写入的是二进制,通过对应输出流输出所需数据。

FileInputStream fis = new FileInputStream(file1);
BufferedInputStream bis = new BufferedInputStream(fis);
DataInputStream in = new DataInputStream(bis);	//数据流

FileOutputStream fos = new FileOutputStream(file2);
BufferedOutputStream bos = new BufferedOutputStream(fos);
DataOutputStream out = new DataOutputStream(bos);		//数据流

DataOutputStream提供的一些对应数据类型的方法

image-20210302211827571

DataInputStream提供的读取方法,读取的类型要一致,写入的顺序和读取的顺序一致

image-20210302212332238

8、随机访问流


RandomAccessFile 声明在java.io包下,直接继承于java.lang.Object类,它实现了DataInput、DataOutput这两个接口,所以它同时拥有读写的功能。

它采用随机访问,程序可以直接跳到文件的任意地方来读、写文件,它内部采用一个指针来记录当前读取的位置,而RandomAccessFile之所以可以随机访问,就是因为能自由的移动该指针。

  • ong getFilePointer():获取指针的当前位置
  • void seek(long pos):将指针移动到指定的位置
//构造方法,其中mode 参数指定了RandomAccessFile 的访问模式:
//1、r: 以只读方式打开,不会创建文件
//2、rw:打开以便读取和写入,如果文件不存在会创建文件
//3、rwd:打开以便读取和写入;同步文件内容的更新
//4、rws:打开以便读取和写入;同步文件内容和元数据的更新
public RandomAccessFile(String name, String mode)throws FileNotFoundException{
    this(name != null ? new File(name) : null, mode);
}
public RandomAccessFile(File file, String mode)throws FileNotFoundException{
    this(file, mode, false);
}

其实这个类通常用来下载,我们在下载时,会创建两个文件,一个文件是与被下载文件大小相同的空文件,另一个文件用来记录指针的位置,如果这次下载暂停后,下次继续下载时可以通过记录的指针位置继续上次的下载。

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

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

相关文章

基于react+typescript的前端组件库violet-design(字节青训营项目)

文章目录前言一、项目介绍💌 介绍特性兼容性📦 安装使用 npm 安装使用 yarn 安装浏览器引入🔨 示例1. 引入样式2. 使用组件按需加载TypeScript✨ 组件🔗 链接二、项目实现2.1 技术选型2.2 架构设计2.2.1 目标用户和场景2.2.2 组件…

容器技术概述

容器化应用程序 软件应用程序通常依赖于运行时环境提供的其他库、配置文件或服务。软件应用程序的传统运行环境是物理主机或虚拟机,应用程序依赖项作为主机的一部分安装。 例如,考虑一个 Python 应用程序,它需要访问实现 TLS 协议的公共共享…

第 16 章_多版本并发控制

第 16 章_多版本并发控制 1. 什么是MVCC MVCC (Multiversion Concurrency Control),多版本并发控制。顾名思义,MVCC 是通过数据行的多个版本管理来实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性读操作…

剑指 Offer 27. 二叉树的镜像

剑指 Offer 27. 二叉树的镜像 难度:easy\color{Green}{easy}easy 题目描述 请完成一个函数,输入一个二叉树,该函数输出它的镜像。 例如输入: 镜像输出: 示例 1: 输入:root [4,2,7,1,3,…

Office 365 备份与恢复

Microsoft Office 365中的不同服务几乎可以随时访问,这要归功于Microsoft的99.9%正常运行时间记录。但是,Office 365步履蹒跚的一个方面是提供了一种从意外数据丢失中恢复的方法。Microsoft 提供的数据保留功能并非适用于所有数据丢失情况的可行解决方案…

亿级高并发电商项目-- 实战篇 --万达商城项目 十二(编写用户服务、发送短信功能、发送注册验证码功能、手机号验证码登录功能、单点登录等模块)

👏作者简介:大家好,我是小童,Java开发工程师,CSDN博客博主,Java领域新星创作者 📕系列专栏:前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶 &#x1f4…

Leetcode力扣秋招刷题路-0082

从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结 82. 删除排序链表中的重复元素 II 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。 示例 1&#…

这6个视频剪辑素材库,你一定要知道~

推荐5个免费商用视频素材网站,建议收藏哦! 1、菜鸟图库 视频素材下载_mp4视频大全 - 菜鸟图库 网站素材量很大,有设计、图片、音频、视频等超多素材,大部分都能免费下载。视频素材都很高清,有自然、人物、科技、农业…

前端页面开发模块组织结构

模块组织 任何超过 1000 行的 CSS 代码,你都曾经历过这样的体验: 这个 class 到底是什么意思呢?这个 class 在哪里被使用呢?如果我创建一个 xxoo class,会造成冲突吗?Reasonable System for CSS Stylesheet Structure 的目标就是解决以上问题,它不是一个框架,而是通过…

Freemarker快速入门

freemarker提供很多指令用于解析各种类型的数据模型参考地址&#xff1a;http://freemarker.foofun.cn/ref_directives.html一.测试搭建Freemarker的运行环境并进行测试.1.添加Freemarker与SpringBoot的整合包XML <!-- Spring Boot 对结果视图 Freemarker 集成 --> <d…

互斥锁原理

如果有交互的公共数据区域&#xff0c;我们需要让一个进程先执行&#xff0c;一个进程后执行&#xff0c;互斥锁就是用锁的方式让他们的竞争关系变得有序。 临界区问题 临界区是在程序之间有公共数据交互时产生的区域&#xff0c;没有两个进程可以在它们各自的临界区同时执行…

我的 System Verilog 学习记录(1)

引言 技多不压身&#xff0c;准备开始学一些 System Verilog 的东西&#xff0c;充实一下自己&#xff0c;这个专栏的博客就记录学习、找资源的一个过程&#xff0c;希望可以给后来者一些借鉴吧&#xff0c;IC找工作的都加把油&#xff01; 本文是准备先简单介绍一下环境搭建…

C++11智能指针std::shared_ptr介绍及使用

介绍 shared_ptr是一种智能指针(smart pointer)&#xff0c;作用有如同指针&#xff0c;但会记录有多少个shared_ptrs共同指向一个对象。这便是所谓的引用计数(reference counting),比如我们把只能指针赋值给另外一个对象,那么对象多了一个智能指针指向它,所以这个时候引用计数…

洛谷P1125 [NOIP2008 提高组] 笨小猴 C语言/C++

[NOIP2008 提高组] 笨小猴 题目描述 笨小猴的词汇量很小&#xff0c;所以每次做英语选择题的时候都很头疼。但是他找到了一种方法&#xff0c;经试验证明&#xff0c;用这种方法去选择选项的时候选对的几率非常大&#xff01; 这种方法的具体描述如下&#xff1a;假设 maxn\…

【C++】2.类和对象(上)

1.面向过程和面向对象 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。C是基于面向对象的&#xff0c;关注的是对象&#xff0c;将一件事情拆分成不同的对象&#xff0c;靠对象之间的交互完成。 2.类的引入…

【发版或上线项目保姆级心得】

第一步&#xff1a;先在正式环境创建数据库/新增表格或者字段 在数据库表中增加字段/表格&#xff0c;不会报错。 但是切记不要过早数据库字段/表格或者删除字段/表格 第二步&#xff1a;修改配置文件 先将正式环境需要的配置给写好&#xff0c;包括但不仅限于数据库配置、…

秋招面试问题整理之机器学习篇

文章目录随机森林在决策树的哪些方面做出了改进随机森林里每棵树的权重不一定会变成什么模型方差和偏差&#xff0c;正则化解决的是方差大还是偏差大的问题正则化的方法总结了解VC维吗svd了解吗随机森林在决策树的哪些方面做出了改进 回答思路&#xff1a; 随机森林和决策树有…

同步syslog日志到服务端

目录结构前言Windows下安装syslog服务端&#xff08;Syslog Watcher Manager&#xff09;Linux下syslog服务端搭建java同步日志代码块日志同步测试前言 系统同步日志到syslog服务器&#xff0c;此文章记录以下内容&#xff1a; Windows下syslog服务端&#xff08;Syslog Watc…

主食吃什么最健康?

又到了订饭的时候了&#xff0c;今天打算吃什么呢&#xff1f;面包&#xff1f;炒饭&#xff1f;面条&#xff1f;还是粥&#xff1f;上面说到的这些都是主食。大家都知道主食能带来很强的饱腹感&#xff0c;而且还是身体最重要、最经济的营养来源。但五谷杂粮&#xff0c;营养…

【项目】好用快搜文档搜索工具

文章目录一、项目分析1、项目调研2、项目需求3、开发环境4、项目知识框架5、项目实现基本理论二、项目设计整体框架设计代码框架设计三、项目实现1、系统工具模块目录遍历2、数据库管理模块2.1、封装数据库管理类(SqliteManager)2.2、封装数据管理类(DataManager)3、扫描模块4、…