OOP01完结-09(字符编码解码+File类+字节字符流+FileUtils+IOUtils)

目录

字符编码

计算机如何存储字符

Java中字符存储&读取

常见字符编码(又名:码表,字符集)

ASCII

ISO-8859-1

GB2312

GBK

GB18030

BIG-5

UTF-8

String类的编码&解码

getBytes(String encoding)

String(byte[],String encoding)

乱码

文件操作-File类

File类概述

File类入门案例

File类方法介绍

判断方法

属性读取方法

操作方法

获取子文件和子目录

File类-了解

内容操作-数据读写

IO概述

IO输出流

IO输入流

IO总结

Apache Commons-IO工具类

FileUtils类

文件读方法

文件写方法

目录操作方法

IOUtils类


字符编码

计算机如何存储字符

计算机中存储的都是0101二进制,我们称之为字节
计算机中 各种文字,标点,我们称之为:字符

当计算机存储字符时,会将 字符 变成 字节保存。这个过程称为编码
当我们需要展示字符时:会将 字节 变成 字符 展示。这个过程称为解码

字符和字节之间的转换不是毫无规律的,是有专门的字典来一一对应。这样的字典我们成为码表

Java中字符存储&读取

我们可以把 char 类型强制转为 int 类型,这样我们就能知道对应字符在 ASCII 码表的位置

Java 中的 char 类型是可以与 int 类型转换的

常见字符编码(又名:码表,字符集)

ASCII

最早的码表。
因其他码表都包含 ASCII 码表,又叫基础码表
美国人的编码,其他码表都包含。ASCII 码表包含 26 个字母大小写、以
及!@#$%^&*()_+=-~等基本符号,不支持中文

ISO-8859-1

拉丁码表(Latin1),是西方通用码表,在 window 中称为 ANSI 字符集。(包含
ASCII 码表,但不包含中文)

GB2312

国标码,支持简体中文。(包含 ASCII 码表和简体中文)

GBK

国标扩展码,支持繁体中文。(包含 GB2312 和繁体中文)

GB18030

最新国标码,兼容 GBK,支持少数名族文字以及其他特殊字符。(包含 GBK
和少数民族文字以及其他特殊字符)

BIG-5

大五码,繁体编码表(港台专用)

UTF-8

万国码,所有国家都使用。汉字有 2-4 个字节组成,一般是 3 个字节。(全球
所有文字都支持)

String类的编码&解码

当向计算机存储字符时,会将 字符 变成 字节 保存。这个过程称为编码
当我们需要展示字符时:会将 字节 变成 字符 展示 。 这个过程称为解码

getBytes(String encoding)

将字符串以指定码表,编码为字节数组
即字符变字节
参数:码表名”utf-8”或”gbk”
返回:byte[]

String(byte[],String encoding)

将字节数组以指定码表,解码为字符串
即字节(数字)变字符
参数:1、字节数组
2、码表名”utf-8”或”gbk”
返回:String

乱码

乱码原因:编码和解码采用的码表不同
避免乱码:确保编码和解码使用相同的码表。

文件操作-File类

File类概述

Java中提供了java.io.File 类,用来代表文件或目录
注意:
   该类用来进行文件或目录的操作
   该类本身没有对文件或目录的数据读写功能
(不带扩展名的是目录,带扩展名的是文件)

File类入门案例

格式:new File(String 路径);

路径注意:
1、 路径书写时,\\和/是同一个效果,建议使用\\ 2、 路径分为:
绝对路径:带盘符的完整路径
相对路径:不带盘符的路径(相对路径默认从 IDEA 项目根目录开始)

File类方法介绍

判断方法

boolean exists()        判断文件或目录是否存在

boolean isFile()        判断对象是否是文件

boolean isDirectory()        判断对象是否是目录

boolean isHidden()        判断对象是否为隐藏文件或目录

属性读取方法

String getName()        获得文件或目录名称

long length()        获取文件字节数。仅判断文件,不能判断目录
如果对象是目录那么返回结果不确定

String getAbsolutePath        获取文件或目录绝对路径

String getPath()        获取文件或目录路径

long lastModified()        获取文件最后一次修改时间(毫秒值)

static File[] listRoots()        获取操作系统所有盘符

操作方法

boolean createNewFile()        当文件不存在时创建空文件。
创建成功返回 true,否则返回 false

boolean mkdir        当目录不存在时创建空目录
创建成功返回true,否则返回false
注:无法重复创建 或 一次创建多个目录,所以被mkdirs 替代

boolean mkdirs()        当目录链不存在时创建空目录链
创建成功 1 个或以上目录返回true,否则返回false

boolean renameTo(File file)        修改文件,目录路径。成功返回true,否则返回false
相当于:剪切、重命名

boolean delete()        删除文件或目录。无法删除非空目录。
删除成功返回true,否则返回 false

获取子文件和子目录

String[] list()        获取当前目录下所有子文件和子目录名称

File[] listFiles()        获取当前目录下所有子文件和子目录

File类-了解

 

内容操作-数据读写

IO概述

IO操作:input output操作,及输入输出操作(输入也叫读操作,输出也叫写操作)

输入:把数据读取到程序中。(从文件读取数据)
输出:从程序中把数据写出。(向文件写出数据)
在 Java 中 File 类没有内容读写功能,仅能操作文件或目录。
而 IO 流类具有内容读写功能

IO输出流

输出流用于向文件写出数据

字符流输出:向文件输出字符/文本数据。 用于纯文本写出操作

 

字节输出流:向文件输出二进制数据(字节),用于所有文件的写出操作。(纯文本操作不如字符流简单)

 

IO输入流

输入流用于从文件读取数据

字符输入流:从文件读取字符数据(仅限文本文件)

 

字节输入流:从文件读取字节数据(可读取文本、图片、电影等一切文件)

 

IO总结

输入字符流        FileReader,仅用于文本读取操作

输入字节流        FileInputStream,适用于所有数据读取操作(文本操作不如字符流简便)

输出字符流        FileWriter,仅用于文本写出操作

输出字节流        FileOutputStream,适用于所有数局写出操作(文本操作不如字符流简便)

总之:文本操作用字符流,其他数据操作用字节流

Apache Commons-IO工具类

FileUtils类

文件读方法

byte[]  readFileToByteArray(File file)        读取 file 文件数据到字节数组中

String readFileToString(File file, String encoding)        读取file文件数据到字符串中,使用encoding指定的字符编码读取

List<String> readLines(File file, String encoding)        读取file文件数据到字符串集合中,集合中每个字符串对应文件中一行数据。使用encoding 指定的字符编码读取

文件写方法

void    writeByteArrayToFile(File file,byte[] date)        

把字节数组 date 写入到文件 file中,本方法会覆盖文件原有内容

void    writeByteArrayToFile(File file, byte[] data, boolean append)

把字节数组data 写入到文件 file 中

append:
true:不会覆盖文件原有内容,而且把 data 追加到文件
原有内容之后;
false:会覆盖文件原有内容

void    writeByteArrayToFile(File file, byte[] data, int off, int len, boolean append)

把字节数组 data 写入到文件 file 中。

off:向外写出的起始索引(从 0 开始,包含起始)
len:向外写出几个字节
例如:off=0 len=3 即写出 0,1,2 这三个索引对应的字节
例如:off=3 len=3 即写出 3,4,5 这三个索引对应的字节
append: 
true:不会覆盖文件原有内容,而且把 data 追加到文件原有内容之后;
false:会覆盖文件原有内容

void    writeStringToFile(File file, String data, String encoding)

把字符串 data 写入到文件 file 中,使用 encoding 指定的编码格式。
本方法会覆盖文件原有内容。

void writeStringToFile(File file, String data, String encoding, boolean append)

把字符串 data 写入到文件 file 中,使用 encoding 指定的编码格式

append:
true:不会覆盖文件原有内容,而且把 data 追加到文件
原有内容之后;
false:会覆盖文件原有内容

目录操作方法

void cleanDirectory(File directory)        清空指定目录下所有内容,不会删除目录本身

void deleteDirectory(File directory)        删除指定目录下所有内容,同时会删除目录本身。

void copyDirectory(File srcDir, File destDir)        把 srcDir 目录下的所有内容复制到 destDir 目录下。

void copyToDirectory(File src, File destDir)        把 src 文件或目录(及目录下所有内容)一并复制到 destDir 目录下

void copyFile(File srcFile, File destFile)
把 srcFile 文件的内容复制到 destFile 文件中。
destFile 文件不存在则创建,存在则覆盖

Collection<File> listFiles(File dir, String[] exts, boolean recursive)        查找 dir 目录下指定扩展名文件

dir:要查找的目录
exts:指定的扩展名,若为 null 表示查找所有
recursive:为 false 表示不查找子目录

Collection<File> listFilesAndDirs(File dir, IOFileFilter fileFilter, IOFileFilter dirFilter)

查找 dir 目录下文件和目录

dir:要查找的目录
fileFilter: TrueFileFilter.INSTANCE:表示查找所有文件
FalseFileFilter.INSTANCE:表示不查找任何文件
其他需求需要自行实现 IOFileFilter 接口
dirFilter: TrueFileFilter.INSTANCE:表示查找所有目录
FalseFileFilter.INSTANCE:表示不查找任何目录
其他需求需要自行实现 IOFileFilter 接口

moveDirectory(File srcDir, File destDir)        

把 srcDir 目录以及目录所有内容  移动 并变成 destDir 目录

movetoDirectory(File src, File destDir, boolean createDestDir)        把 src 文件或目录剪切到 destDir 目录下

createDestDir:
true:当 destDir 目录不存在时创建该目录链;
false:当 destDir 目录不存在时抛出 IOException 异常

long sizeOf(File file)读取文件或目录的字节数。

(注意:File 类的 length()方法不能读取目录的字节数)

IOUtils类

int copy(InputStream input, OutputStream output)

读取 input 中的字节数据,写入到 output 中。返回值为读写的数据字节数

int copy(Reader reader, Writer writer)

读取 reader 中的字符数据,写入到 writer 中。返回值为读写的数据字符数

List<String> readLines(InputStream input, String encoding)

读取 input 中的字节数据,根据 encoding 指定的码表进行解码后返回。返回值的 List<String>中每个 String 元素对应一行记录

List<String> readLines(Reader reader)

读取 reader 中的字符数据返回。返回值的 List<String>中每个 String 元素对应一行记录

byte[] toByteArray(InputStream input)

读取 input 中的字节数据返回。

String toString(InputStream input, String ecoding)

读取 input 中的字节数据,根据 encoding 指定的码表进行解码后返回

String toString(Reader reader)

读取 reader 中的字符数据返回。

void write(byte[] data, OutputStream output)

将字节数据 data 写入到输出流 output 中。

void write(String data, Writer writer)

将字符数据 data 写入到输出流 writer 中
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值