黑马程序员技术交流社区
标题:
[石家庄校区]就业班JavaSE高级部分day09 字节流 字符流 Properties
[打印本页]
作者:
湿漉漉的文字控
时间:
2018-11-26 16:02
标题:
[石家庄校区]就业班JavaSE高级部分day09 字节流 字符流 Properties
就业班
JavaSE
高级部分
day09 字节流 字符流 Properties
IO流:
输入输出流
流: 数据流
输入: 从硬盘(文件)读取到内存(Java程序)
输出: 从内存(Java程序)写入到硬盘(文件)
(入和出都是相对于内存来说的)
字节流:
计算机中, 无论文本, 视频, 音频, 图片... 一切都是以"字节byte"形式存储的
也就是以数字形式存储的, 而数字可以用不同进制表示, 计算机能看懂的是二
进制数字
文件存储原理和记事本打开文件的原理:
向文件中写入字节数据时, 十进制的数字会被转换为"二进制"的数字写入文件
文本编辑器打开文本文件时, 会先查询编码表, 将二进制数字转换为对应的字符进行显示
字节输出流:续写换行
java.io.FileOutputStream类: 文件字节输出流
// 带有 续写 功能的构造方法, 不会清空文件
Windows系统: "\r\n"
Linux系统: "\n"
MacOS系统: "\r"
字节输出流: 一次写一个字节到文件
写数据的原理
:
Java程序
->
JVM虚拟机
->
OS操作系统
->
OS调用写数据的方法
->
将数据写入文件
使用字节输出流写数据到文件的步骤
:
1.
创建对象
:
创建FileOutputStream对象
,
构造方法中传递文件路径
2.
写入数据
:
使用FileOutputStream对象调用
write
(
int
b
)
方法
,
将字节写入文件
3.
释放资源
:
使用FileOutputStream对象调用
close
()
方法
,
关闭流对象释放资源
字节输出流: 一次写多个字节
Java中
,
byte的范围是
-
128
~
127
共256个数值
编码表中字符范围是
0
~
255
共256个数值
写多个字节时
:
如果第一个字节是正数中的
0
~127
,
则记事本会查询
ASCII码表
显示字符
如果第一个字节是负数中的
:
-
128
~
-
1
,
则记事本会查询
GBK码表
显示字符
.(
将两个连续的byte组合为一个中文
)
字节输入流: 一次读取一个字节
FileInputStream读数据步骤
:
1.
创建FileInputStream对象
2.
使用FileInputStream对象
,
调用
int
read
()
方法
,
一次读取一个byte
3.
释放资源
字节输入流: 一次一个字节数组
java
.
io
.
InputStream抽象类
:
字节输入流
(
顶层类
)
int
read
(
byte
[]
b
):
一次读一个字节数组
参数
byte
[]
b
作用
:
存储每次读到的字节
,
起到缓冲作用
返回值作用
:
每次读到的字节个数
,
读到文件末尾返回
-
1
GBK编码中, 一个汉字占用2个byte
UTF-8编码中, 一个汉字占用3个byte
字符输入流: 2种方式读取文本文件
java
.
io
.
Reader抽象类
:
字符输入流
(
顶层
)
int
read
():
一次读一个字符char
,
返回读到的字符
.
读到文件末尾返回
-
1
(
返回int为了代码编写方便
)
int
read
(
char
[]
cbuf
):
一次读取一个字符数组char
[]
返回读取的字符个数
.
读到文件末尾返回
-
1
java
.
lang
.
String类
:
String
(
char
[]
value
):
将char数组转换为String
String
(
char
[]
value
,
int
offset
,
int
count
):
将char数组的一部分转换为String
字符输出流: Writer和FileWriter
java
.
io
.
Writer抽象类
:
字符输出流
(
顶层类
)
'a''b'
缓冲区
97
98
// 常用成员方法
abstract
void
close
():
刷新缓冲区并释放资源
abstract
void
flush
()
:刷新缓冲区
// 写
void
write
(
int
c
):
写一个字符
(
int类型为了代码编写方便
)
void
write
(
char
[]
cbuf
):
写一个字符数组
abstract
void
write
(
char
[]
b
,
int
off
,
int
len
):
写一个字符数组的一部分
void
write
(
String
str
):
写一个字符串
void
write
(
String
str
,
int
off
,
int
len
):
写一个字符串的一部分
注意
:
write
()
方法只是将数据写到内存缓冲区
,
最后必须调用flush
()
或close
()
才能将数据真正写入磁盘
java
.
io
.
FileWriter类
:
文件字符输出流
// 构造方法
FileWriter
(
File
file
):
通过File对象创建文件字符输出流
FileWriter
(
String
fileName
):
通过文件路径创建文件字符输出流
Properties存储数据和遍历
Properties双列集合
:
键和值都是
String
类型
java
.
util
.
Properties类
:
属性集
,
属于Map的双列集合
,
继承自Hashtable
// 构造方法
Properties
():
创建一个Properties集合
// 特有成员方法
Object
setProperty
(
String
key
,
String
value
):
保存
/
替换键值对
String
getProperty
(
String
key
):
通过键获取值
.
键不存在返回null
Set
<
String
>
stringPropertyNames
():
返回键的集合
void
store
(
OutputStream
out
,
String
comments
):
将集合用字节流写入文件
(
不能中文
),
并写入注释
void
store
(
Writer
writer
,
String
comments
):
将集合用字符流写入文件
(
可以中文
),
并写入注释
void
load
(
InputStream
inStream
):
从配置文件中通过字节流加载数据到Properties集合
(
不能中文
)
void
load
(
Reader
reader
):
从配置文件中通过字符流加载数据到Properties集合
(
可以中文
)
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2