存储&读写数据的方案

EaborH

存储数据的方案

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.