java流与文件——文本输入输出

【0】README

0.1) 本文描述转自 core java volume 2, 旨在理解 java流与文件——文本输入输出 的相关知识;
0.2) 在保存数据时,可以选择是二进制还是文本格式; 在存储文本字符串时, 需要考虑字符编码方式。
0.3) OutputStreamWriter 和 InputStreamReader

  • 0.3.1)OutputStreamWriter 类:将使用选定的字符编码方式, 把Unicode 字符流转换为 字节流;
  • 0.3.2)InputStreamReader 类:将包含字节的输入流转换为 可以产生Unicode码元的读入器;
    这里写图片描述

0.4)看个荔枝: 让一个输入读入器从控制台或文件中读入信息

  • 0.4.1) InputStreamReader in = new InputStreamReader(System.in);
  • 0.4.2) InputStreamReader in = new InputStreamReader(new FileInputStream(“a.dat”), “ISO8859_5”);

【1】如何写出文本输出

1.1)文本输出,使用 PrintWriter(打印写出器): 这个类拥有以文本格式打印字符串和数字的方法, 它甚至还有一个将PrintWriter 链接到 FileWriter 的便捷方法, 如下:

PrintWriter out = new PrintWriter("a.txt");
等价于:
PrintWriter out = new PrintWriter(new FileWriter("a.txt"));
  • 1.1.1)为了输出到打印写出器,需要使用 print, println, printf 方法;
  • 1.1.2)看个荔枝:
String name = "nihao";
double salary = 123;
out.print(name);
out.print(" ");
out.print(salary);
它将把下面的字符 nihao , 123 输出到写出器;之后这些字符会被转换成字节并最终写入 a.txt 中;

这里写图片描述

  • 1.1.3)行结束符: println 方法添加行结束符(windows 是 “\r\n”, unix是 “\n”),通过调用System.getProperty(“line.separator”) 来获得字符串;

1.2)自动冲刷模式(干货——是否开启自动冲刷模式)

  • 1.2.1)如果写出器设置为 自动冲刷模式, 只要println 被调用, 则缓冲区的所有字符都会被发送到他们的目的地;
  • 1.2.2)该模式默认是禁用的, 通过 PrintWriter(Writer out, Boolean autoFlush) 来开启或禁用自动冲刷机制;

Attention)

  • A1) PrintStream 可构建读入器和写出器, 而 System.out 不是读入器和 写出器;
  • A2)为了与已有代码兼容,System.in, System.out, System.err仍旧是流而不是读入器或写出器;

【2】如何读入文本输入

2.1)以二进制格式写出数据, 用 DataOutputStream;
2.2) 以文本格式写出数据, 用 PrintWriter;
2.3)处理文本输入的方式可以通过 BufferedReader类, 它拥有一个 readLine 方法,使得我们可以读入一行文本;

  • 2.3.1)将 带缓冲区的读入器和输入源组合起来:
    BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(“a.txt”), “UTF-8”));
    2.4)然而 , BufferedReader 没有任何用于读入数字的方法, 建议使用 Scanner 来读入文本输入;
    这里写图片描述

【3】以文本格式存储对象

3.1)看个荔枝: 将一个 Employee 数组存储为一个文本文件, 其中每条记录都保存成单独的一行, 字段间用分隔符隔开(如,竖线 | , 或冒号 : 作为分隔符);
(https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdvanced/chapter1/TextFileTest.java)
这里写图片描述
这里写图片描述


【4】字符集

4.1)在 java SE 1.4中引入的 java.nio 包用到了 Charset 类统一了对字符集的转换(注意,s是小写的);
4.2)字符集建立了两字节 Unicode码元序列与使用本地字符编码方式的字节序列间的映射;

  • 4.2.1)ISO-8859-1: 是最流行的字符编码方式之一, 这是一种对 Unicode前 256个字符进行单字节编码的方式;
  • 4.2.2)aliases方法: 它可以返回由别名构成的 Set对象:
Set<String> aliases = cset.aliases();
for(String alias : aliases)out.println(alias);
  • 4.2.3)字符集的大小写是不敏感的;
  • 4.2.4)调用静态的 forName 方法:获得一个 Charset, 只需要传递一个官方名字或别名;
Charset charset = Charset.forName("ISO-8859-1");
  • 4.2.5)静态方法 availableCharsets: 确定在某个特定实现中哪些字符集是可用的:
Map<String, Charset> charsets = Charset.availableCharsets();
for(String name : charsets.keSet())out.println(name);

(https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdvanced/chapter1/CharsetTest.java)
这里写图片描述

4.3)本地编码方式模式不能表示所有的Unicode字符,如果某个字符不能表示, 它将被转换为 ?;(干货——为什么出现 ? 的原因)

  • 4.3.1)编码字符串:一旦有了字符集,就可以使用它在包含Unicode码元的 java 字符串 和 编码而成的字节序列间进行转换, 下面是如何编码java 字符串的代码的:
String str  = ...;
ByteBuffer buffer = cset.encode(str);
byte[] bytes = buffer.array();
  • 4.3.2)解码字符串: 需要字节缓冲区。使用 ByteBuffer数组的静态方法wrap 可以将一个字节数组转换为一个字节缓冲区。 decode 方法的结果是 CharBuffer, 调用它的 toString() 方法将获得一个字符串;
Byte[] bytes = ...;
ByteBuffer buffer = ByteBuffer.wrap(bytes, offset, length);
CharBuffer cbuf = cset.decode(buffer);
String str = buffer.toString();

这里写图片描述

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

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

相关文章

RandomAccessFile类解析

【0】README 0.1&#xff09; 本文描述转自 core java volume 2&#xff0c; 旨在理解 java流与文件——RandomAccessFile类解析 的相关知识&#xff1b; 0.1&#xff09; 本文 转自&#xff1a; http://blog.csdn.net/akon_vm/article/details/7429245 &#xff0c; for com…

Servlet之Tomcat配置与启动(一)

一、 部署并启动 tomcat 服务器 1). 解压 apache-tomcat-7.0.11.zip 到一个非中文目录下 2). 配置一个环境变量 java_home(指向 JDK 安装的根目录) 或 jre_home 3). 通过双击 apache-tomcat-6.0.16\bin 目录下的 startup.bat, 启动服务器 4). 可以在浏览器中输入 localhost:8…

随机数生成器c语言,句子随机生成器-怎么用C语言生成随机数

为随机数生成器初始化一个种子值在易语言中使用什么命令名置随机数种子 ()‘调用格式&#xff1a; 〈无返回值〉 置随机数种子 (〔整数型 欲置入的种子数值〕) - 系统核心支持库->算术运算英文名称&#xff1a;randomize为随机数生成器初始化一个种子值&#xff0c;不同的种…

nsstring 空值比较_用比较器的nulls排序具有空值的列表

nsstring 空值比较你好朋友&#xff0c; 在本教程中&#xff0c;我们将看到如何使用Java 8 Comparator.nullsFirst在列表中的项目很少为空时如何对项目列表进行排序&#xff0c;从而将null视为列表中的最小元素。 –什么是比较器 – nullsFirst方法在Comparator中做什么 –…

hibernate的Configuration和配置文件

一、hibernate的入口Configuration 在Hibernate中&#xff0c;Configuration是hibernate的入口。在实例化一个Configuration的时候&#xff0c;Hibernate会自动在环境变量&#xff08;classpath&#xff09;里面查找Hibernate配置文件hibernate.properties。如果该文件存在&…

单片机c语言6种开方,单片机快速开平方的算法

C语言中开平方的算法中要开平方的话,可以在头文件中加#include .然后调sqrt(n);函数即可.但在单片机中要开平方.可以用到下面算法:算法1:本算法只采用移位、加减法、判断和循环实现&#xff0c;因为它不需要浮点运算&#xff0c;也不需要乘除运算&#xff0c;因此可以很方便地运…

spring 配置只读事务_只读副本和Spring Data第3部分:配置两个实体管理器

spring 配置只读事务我们之前的设置可以正常工作。 我们现在要做的是进一步发展&#xff0c;并配置两个单独的实体管理器&#xff0c;而不会影响我们之前实现的功能。 第一步是将默认实体管理器配置设置为主要配置。 这是第一步 package com.gkatzioura.springdatareadreplic…

java流与文件——读写二进制数据(DataOutput + DataInput)

【0】README 0.1&#xff09; 本文描述转自 core java volume 2&#xff0c; 旨在理解 java流与文件——读写二进制数据&#xff08;DataOutput DataInput&#xff09;的相关知识&#xff1b; 0.2&#xff09; for complete my diy code, please visit https://github.com/p…

dsp课程设计c语言源码,DSP课程设计-基于C语言实现256点的FFT精选.pdf

DSP课程设计-基于C语言实现256点的FFT精选XX 大学J1111111 UNIVERSITYDSP 课 程 设 计基于CCS 的FFT 算法的C 语言实现和验证学院名称&#xff1a;专业班级&#xff1a;学 号&#xff1a;学生姓名&#xff1a;指导教师姓名&#xff1a;201 年 0 月 0 日一、 课程设计目的1.此次…

java 字符数组与字符串_用于字符串和数组的5种简单有效的Java技术

java 字符数组与字符串Java通常会排在前五种最流行的编程语言中&#xff0c;因此可以理解。 它是一种通用语言&#xff0c;非常容易学习&#xff0c;因为它是一种高级语言&#xff0c;并且可以满足许多用例。 由于这些原因&#xff0c;Java是一门很棒的语言&#xff0c;可以用来…

Hibernate之映射

一、映射文件 Hibernate在实现ORM功能的时候主要用到的文件有&#xff1a; 1、 映射类&#xff08;*.Java&#xff09; 描述数据库表的结构&#xff0c;表的字段映射为类的属性&#xff0c;表的记录映射为类的对象。 2、映射文件&#xff08;*.hbm.xml&#xff09; …

java流与文件——ZIP文档

【0】README 0.1&#xff09; 本文描述转自 core java volume 2&#xff0c; 旨在理解 java流与文件——ZIP文档 的相关知识&#xff1b; 0.2&#xff09; for source code, please visit https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdvanced/cha…

单片机与gsm通信c语言,gsm模块如何与单片机通信?

51单片机与GSM模块实现通信1、检测串口线的好坏1)将串口线插在电脑上&#xff0c;用短路子短接串口的2脚和3脚2)打开串口调试助手3)点击自动发送&#xff0c;在自动发送的窗口中随便发个数据&#xff0c;看看能不能接收到若能接收到自己发的数据表示串口线是正常的&#xff0c;…

aws terraform_在AWS第1部分中使用Terraform自动缩放组:基本步骤

aws terraform因此&#xff0c;您想使用Terraform在AWS上创建一个自动缩放组。 以下是达到此目的的最少步骤。 在编写实际代码之前&#xff0c;应指定aws terraform提供程序以及provider.tf文件上的区域。 provider "aws" { version "~> 2.0" region …

java流与文件——java生成解压缩文件(夹)

【0】README 0.1&#xff09; 本文描述转自 http://blog.csdn.net/chenssy/article/details/9622171 &#xff0c; 旨在理解 java流与文件——java生成解压缩文件&#xff08;夹&#xff09; 的相关知识&#xff1b; 0.2&#xff09; for my diy source code, please visit h…

Java的系统Property

一、java 系统Properties修改 (1)System.getProperties()可以确定当前的系统属性,返回值是一个Properties; (2)System.load(String filename)加载文件中的属性Properties等同于&#xff1a;System.getProperties().load(String filename) (3)System.setProperties(Properties p…

android 发布最新系统更新包,安卓升级包(安卓补丁包更新)

安卓升级包(安卓补丁包更新)2021-02-08 15:39“固件升级”文石BOOX Android 6.0及以上型号都支持升级最新系统&#xff01;好消息&#xff01;截至今天&#xff0c;您在BOOX安卓6.0系统以上的所有阅读器型号&#xff0c;都支持升级到最新BOOX OS 2.3.1系统了&#xff01;?的设…

apache.camel_Apache Camel 3.1 –更多骆驼核心优化(第3部分)

apache.camel我以前曾在博客中介绍过我们在下一个Camel 3.1版本中所做的优化 博客第1部分 博客第2部分 今天&#xff0c;我想简要介绍一下我们已经完成的最新开发&#xff0c;因为我们准备在本周末或下半年准备好构建和发布Camel 3.1。 从第2部分开始&#xff0c;我们设法在…

AVL树的单双旋转解析

【0】README 0.0&#xff09; 本文部分idea 转自&#xff1a;http://blog.csdn.net/collonn/article/details/20128205 0.1&#xff09; 本文专注于 解析 AVL 树的 单旋转&#xff08;左左单旋转和右右单旋转&#xff09; 和 双旋转&#xff08;左右双旋转和右左单旋转&#…

List转数组toArray方法

一、List.toArray方法 List提供了一个将List转为数组的一个非常方便的方法toArray。toArray有两个重载的方法&#xff1a; Object[]toArray() 返回按适当顺序包含列表中的所有元素的数组&#xff08;从第一个元素到最后一个元素&#xff09;。<T> T[]toArray(T…