文件编码
如果直接复制文本内容会自动转换编码
ANSI并不是某一种特定的字符编码,而是在不同的系统中,ANSI表示不同的编码。比如在中文系统中使用gbk
当你的字节序列是某种编码时,这个时候想把字节序列变成字符串,也需要用这种编码方式,否则会出现乱码
文本文件本身可以是任意编码的字节序列,但在utf-8下创建的文本文件只能识别为utf-8的编码,复制文件到其他编码环境下会识别为乱码,复制文本内容会自动转换
在.java
文件中指定的各种编码格式,无论指定成哪种格式,最后在编译成.class
时统统经过了 unicode 编码转换成双字节
|
|
File类
java.io.File类用于表示文件或目录的信息(名称、大小等),不能用于文件内容的访问
|
|
|
|
RandomAccessFile类
RandomAccessFile类提供对文件内容的访问,既可以读文件,也可以写文件。支持随机访问文件,可以访问文件的任意位置。
- 在硬盘上的文件是以
byte byte byte
形式存储的,是数据的集合 - RandomAccessFile打开文件有两种模式:
rw
(读写),r
(只读) - 文件指针,打开文件时指针在开头
pointer = 0
; - 写方法:
raf.write(int)
只写一个字节(后8位),同时指针指向下一个位置,准备再次写入 - 读方法:
int b = raf.read()
—>读一个字节 - 文件读写完成以后一定要关闭
raf.close()
- 不存在追加,如果需要追加,将位置定位到文件末尾,使用
long fileLen = raf.length(); raf.seek(fileLen);
IO流
IO流分为输入流、输出流,又分为字节流、字符流
字节流
InputStream和OutputStream是抽象类
- InputStream:抽象了应用程序读取数据的方式
- OutputStream:抽象了应用程序写出数据的方式
- EOF = End 读到-1就读到结尾
输入流基本方法
int b = in.read();
读取一个字节无符号填充到int低八位,如果已到达文件末尾,则返回 -1。in.read(byte[] buf)
读取数据填充到字节数组bufin.read(byte[] buf,int start, int size);
读取数据到字节数组buf从buf的start位置开始存放size长度的数据
输出流基本方法
out.write(int b)
写出一个byte到流,b的低8位out.write(byte[] buf)
将buf字节数组都写到流out.write(byte[] buf, int start,int size)
字节数组buf从start位置开始写size长度的字节到流
FileInputStream类
InputStream的子类,具体实现了在文件上读取数据
|
|