存储&读写数据的方案

存储数据的方案
File是java.io.包下的类,File类的对象,用于代表当前操作系统的文件(可以是文件、或文件夹)
注意: File类只能对文件本身进行操作不能读写文件里面存储的数据
File、IO流
IO流用于读写数据的(可以读写文件,或网络中的数据…)
File
File类的对象可以代表文件/文件夹,并可以调用其提供的方法对象文件进行操作。
创建File类的对象
构造器 | 说明 |
---|---|
public File(String pathname) |
根据文件路径创建文件对象 |
public File(String parent, String child) |
根据父路径和子路径名字创建文件对象 |
public File(File parent, String child) |
根据父路径对应文件对象和子路径名字创建文件对象 |
注意: |
- File对象既可以代表文件、也可以代表文件夹。
- File封装的对象仅仅是一个路径名,这个路径可以是存在的,也允许是不存在的。
File类提供的遍历文件夹的功能
方法名称 | 说明 |
---|---|
public String[] list() |
获取当前目录下所有的”一级文件名称”到一个字符串数组中去返回。 |
public File[] listFiles() |
获取当前目录下所有的”一级文件对象”到一个文件对象数组中去返回(重点) |
使用listFiles方法时的注意事项: |
- 当主调是文件,或者路径不存在时,返回null
- 当主调是空文件夹时,返回一个长度为0的数组
- 当主调是一个有内容的文件夹时,将里面所有一级文件和文件夹的路径放在File数组中返回
- 当主调是一个文件夹,且里面有隐藏文件时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件
- 当主调是一个文件夹,但是没有权限访问该文件夹时,返回null
字符集
ASCII字符集
- ASCll(American Standard Code for Information Interchange):美国信息交换标准代码,包括了英文、符号等。
- 标准ASCII使用1个字节存储一个字符,首位是0,因此,总共可表示128个字符,对美国佬来说完全够用。
GBK(汉字内码扩展规范,国标)
- 汉字编码字符集,包含了2万多个汉字等字符,GBK中一个中文字符编码成两个字节的形式存储
- 注意:GBK兼容了ASCII字符集
Unicode字符集(统一码,也叫万国码)
- Unicode是国际组织制定的,可以容纳世界上所有文字、符号的字符集。
- UTF-32,4个字节表示一个字符
UTF-8
- 是Unicode字符集的一种编码方案,采取可变长编码方案,共分四个长度区:1个字节,2个字节,3个字节,4个字节
- 英文字符、数字等只占1个字节(兼容标准ASCI编码),汉字字符占用3个字节。
对字符的编码
String提供了如下方法 | 说明 |
---|---|
byte[] getBytes() |
使用平台的默认字符集将该String编码为一系列字节,将结果存储到新的字节数组中 |
byte[] getBytes(String charsetName) |
使用指定的字符集将该String编码为一系列字节,将结果存储到新的字节数组中 |
对字符的解码 |
String提供了如下方法 | 说明 |
---|---|
String(byte[] bytes) |
通过使用平台的默认字符集解码指定的字节数组来构造新的String |
String(byte[] bytes, String charsetName) |
通过指定的字符集解码指定的字节数组来构造新的String |
IO流
FileInputStream(文件字节输入流)
作用:以内存为基准,可以把磁盘文件中的数据以字节的形式读入到内存中去
构造器 | 说明 |
---|---|
public FileInputStream(File file) |
创建字节输入流管道与源文件接通 |
public FileInputStream(String pathname) |
创建字节输入流管道与源文件接通 |
方法名称 | 说明 |
---|---|
public int read() |
每次读取一个字节返回,如果发现没有数据可读会返回-1. |
public int read(byte[] buffer) |
每次用一个字节数组去读取数据,返回字节数组读取了多少个字节,如果发现没有数据可读会返回-1. |
FileOutputStream文件字节输出流
作用:以内存为基准,把内存中的数据以字节的形式写出到文件中去。
构造器 | 说明 |
---|---|
public FileOutputStream(File file) |
创建字节输出流管道与源文件对象接通 |
public FileOutputStream(String filepath) |
创建字节输出流管道与源文件路径接通 |
public FileOutputStream(File file, boolean append) |
创建字节输出流管道与源文件对象接通,可追加数据 |
public FileOutputStream(String filepath, boolean append) |
创建字节输出流管道与源文件路径接通,可追加数据 |
方法名称 | 说明 |
---|---|
public void write(int a) |
写一个字节出去 |
public void write(byte[] buffer) |
写一个字节数组出去 |
public void write(byte[] buffer , int pos , int len) |
写一个字节数组的一部分出去 |
public void close() throws IOException |
关闭流 |
资源释放try-with-resource
FileReader文件字符输入流
作用:以内存为基准,可以把文件中的数据以字符的形式读入到内存中去。
构造器 | 说明 |
---|---|
public FileReader(File file) |
创建字符输入流管道与源文件接通 |
public FileReader(String pathname) |
创建字符输入流管道与源文件接通 |
方法名称 | 说明 |
---|---|
public int read() |
每次读取一个字符返回,如果发现没有数据可读会返回-1. |
public int read(char[] buffer) |
每次用一个字符数组去读取数据,返回字符数组读取了多少个字符,如果发现没有数据可读会返回-1. |
FileWriter文件字符输出流
作用:以内存为基准,把内存中的数据以字符的形式写出到文件中去。
构造器 | 说明 |
---|---|
public FileWriter(File file) |
创建字节输出流管道与源文件对象接通 |
public FileWriter(String filepath) |
创建字节输出流管道与源文件路径接通 |
public FileWriter(File file, boolean append) |
创建字节输出流管道与源文件对象接通,可追加数据 |
public FileWriter(String filepath, boolean append) | 创建字节输出流管道与源文件路径接通,可追加数据 |
方法名称 | 说明 |
---|---|
void write(int c) |
写一个字符 |
void write(String str) |
写一个字符串 |
void write(String str, int off int len) |
写一个字符串的一部分 |
void write(char[] cbuf) |
写入一个字符数组 |
void write(char[] cbuf, int off, int len) |
写入字符数组的一部分 |
缓冲流
BufferedInputStream缓冲字节输入流
作用:可以提高字节输入流读取数据的性能
原理:缓冲字节输入流自带了8KB缓冲池;缓冲字节输出流也自带了8KB缓冲池。
构造器 | 说明 |
---|---|
public BufferedInputStream(InputStream is) |
把低级的字节输入流包装成一个高级的缓冲字节输入流,从而提高读数据的性能 |
public BufferedOutputStream(OutputStream os) |
把低级的字节输出流包装成一个高级的缓冲字节输出流,从而提高写数据的性能 |
BufferedReader缓冲字符输入流
作用:自带8K(8192)的字符缓冲池,可以提高字符输入流读取字符数据的性能
构造器 | 说明 |
---|---|
public BufferedReader(Reader) |
把低级的字符输入流包装成字符缓冲输入流管道,从而提高字符输入流读字符数据的性能 |
字符缓冲输入流新增的功能:按照行读取字符 |
方法 | 说明 |
---|---|
public String readLine() |
读取一行数据返回,如果没有数据可读了,会返回null |
BufferedWriter缓冲字符输出流
作用:自带8K的字符缓冲池,可以提高字符输出流写字符数据的性能。
构造器 | 说明 |
---|---|
public BufferedWriter(Writer r) |
把低级的字符输出流包装成一个高级的缓冲字符输出流管道,从而提高字符输出流写数据的性能 |
字符缓冲输出流新增的功能:换行
方法 | 说明 |
---|---|
public void newLine() |
换行 |
其他流
字符输入转换流 InputStreamReader
InputStreamReader(字符输入转换流)
- 解决不同编码时,字符流读取文本内容乱码的问题。
- 解决思路:先获取文件的原始字节流,再将其按真实的字符集编码转成字符输入流,这样字符输入流中的字符就不乱码了。
构造器 | 说明 |
---|---|
public InputStreamReader(InputStream is) |
把原始的字节输入流,按照代码默认编码转成字符输入流(与直接用FileReader的效果一样) |
public InputStreamReader(InputStream is ,String charset) |
把原始的字节输入流,按照指定字符集编码转成字符输入流(重点) |
打印流
PrintStream/PrintWriter(打印流)
作用: 打印流可以实现更方便、更高效的打印数据出去,能实现打印啥出去就是啥出去。
PrintStream提供的打印数据的方案
构造器 | 说明 |
---|---|
public Printstream(OutputStream/File/String) |
打印流直接通向字节输出流/文件/文件路径 |
public PrintStream(String fileName, Charset charset) |
可以指定写出去的字符编码 |
public PrintStream(OutputStream out, boolean autoFlush) | 可以指定实现自动刷新 |
public PrintStream(OutputStream out, boolean autoFlush, String encoding) | 可以指定实现自动刷新,并可指定字符的编码 |
方法 | 说明 |
---|---|
public void println(Xxx xx) |
打印任意类型的数据出去 |
public void write(int/byte[]/byte[]一部分) |
可以支持写字节数据出去 |
IO框架
什么是框架?
框架(Framework)是一个预先写好的代码库或一组工具,旨在简化和加速开发过程
框架的形式:一般是把类、接口等编译成class形式,再压缩成一个jar结尾的文件发行出去。
- Title: 存储&读写数据的方案
- Author: EaborH
- Created at : 2025-03-28 00:00:00
- Updated at : 2025-03-28 16:21:56
- Link: https://eabor.xyz/2025/03/28/存储&读写数据的方案/
- License: This work is licensed under CC BY-NC-SA 4.0.