JAVA 文件读写

目录

文件读写操作

字符编码

用1个或多个字节来表示一个字符

二进制编码

二进制解码

变长编解码

变长编码

变长解码

定长记录(按行写入)

读取文件

写入文件

小文件的访问

对File对象的操作函数


相关内容:JAVA 基本知识 JAVA 类和对象 类的特性

文件读写操作

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

  1. 创建一个编码器,容量为100字节
    ByteBuffer bbuf = ByteBuffer.allocate(100);

2.填入一个int值

    bbuf.putInt(a)

3.复制到data里面

byte data[]=bbuf.array();

二进制解码

** ByteBuffer解码**

  1. 包装一个 buffer,对其中数据进行解码 byte[]buffer = new byte[100]; ByteBuffer.wrap(buffer, off, size)

  2. 设置指针位置 bbuf. position()

  3. 提取数据

    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()返回一个目录中的文件名和目录名的字符串数组
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值