目录
文件读写操作
import org.omg.CORBA.portable.OutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
public class 文件读写 {
//将数据写入到文件
String str = "你好";
byte[] data = str.getBytes("UTF-8");
//String.getBytes()实现字符编码
//可能会抛出异常,不支持的编码方式
File file = new File("exampl.1");
OutputStream output = new FileOutputStream(file);
//其中,File仅表示文件路径, FileOutputStream才是真的创建文件
output.write(data);
output.close();
//文件的读取
byte[] buffer = new byte[1000];
InputStream input = new FileInputStream(file);
int n = input.read(buffer, 0, 1000);
//如何将提取的byte流数据编程可读的String数据?
//使用String的构造函数
String s=new String(buffer);
input.close();
字符编码
用1个或多个字节来表示一个字符
-
ASCII:用1个字节表示一个字符
-
GBK:用2个字节表示一个字符
-
UTF-8:用1-3个字节表示一个 Unicode字符
-
UTF-16:用2个字节表示一个 Unicode字符
-
UTF-32:用4个字节表示一个 Unicode字符
二进制编码
ByteBuffer,一个基于字节的二进制编码器
需要导入import java.nio.ByteBuffer
- 创建一个编码器,容量为100字节
ByteBuffer bbuf = ByteBuffer.allocate(100);
2.填入一个int值
bbuf.putInt(a)
3.复制到data里面
byte data[]=bbuf.array();
二进制解码
** ByteBuffer解码**
-
包装一个 buffer,对其中数据进行解码 byte[]buffer = new byte[100]; ByteBuffer.wrap(buffer, off, size)
-
设置指针位置 bbuf. position()
-
提取数据
int a= bbuf getInt()
变长编解码
提供两个工具方法
变长编码
Util. encodeString(bbuf, str, encoding)
变长解码
str= Util. decodeString(bbuf, encoding)
定长记录(按行写入)
当用文件存储列表数据时,每一条数据称为一条记录
- 变长记录:每条记录的大小是变化的
- 定长记录:每条记录的大小是固定的
- 比如,固定有100字节来保存一条 Student数据 这是一种简化(粗犷)的实现方式
读取文件
- 一行一行读取文件,适合字符读取,若读取中文字符时会出现乱码
FileReader fileReader = new FileReader(fileName);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String line =bufferedReader.readLine();
while (line!=null){
System.out.println(line);
line = bufferedReader.readLine();
}
bufferedReader.close();
fileReader.close();
//blog.csdn.net/weixin_42129373/article/details/82154471
- 一行一行读取文件,解决读取中文字符时出现乱码
FileInputStream fis=new FileInputStream(fileName);
InputStreamReader isr=new InputStreamReader(fis, "UTF-8");
BufferedReader br = new BufferedReader(isr);
//剩余如上
写入文件
- 一行一行写入文件,适合字符写入,若写入中文字符时会出现乱码
FileWriter fw=new FileWriter(File fileName);
BufferedWriter bw=new BufferedWriter(fw);
for(String arr:arrs){
bw.write(arr+"\t\n");
}
bw.close();
fw.close();
- 一行一行写入文件,解决写入中文字符时出现乱码
FileOutputStream fos=new FileOutputStream(File fileName);
OutputStreamWriter osw=new OutputStreamWriter(fos, "UTF-8");
BufferedWriter bw=new BufferedWriter(osw);
小文件的访问
-
当文件较小时(比如,<1M字节)
-
写数据:先将所有数据编码到缓冲区,然后一次性写入
-
读数据:先将所有数据一次性读取,然后再作解析
记住,内存操作是快的,硬盘read/ write是慢速操作
对File对象的操作函数
方法名 | 说明 |
---|---|
File(String pathname) | File类的构造方法 |
boolean exists() | 测试文件或目录是否存在 |
String getAbsolutePath() | 返回绝对路径名字符串 |
boolean isDirectory() | 测试是否是一个目录 |
boolean isFile() | 测试是否是一个标准文件 |
long length() | 返回文件的长度 |
File[] listFiles() | 返回一个目录中文件和目录的File对象数组 |
String[] list() | 返回一个目录中的文件名和目录名的字符串数组 |