IO补充

RandomAccessFile

  支持对文件的任意读取与写入。随机访问文件的行为类似存储在文件系统都一个大型byte数组。存在指向该隐藏数组的光标或索引,成为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。该文件指针可以通过getFieldPointer方法读取,并通过seek方法设置。

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;

public class RandomAccessFileDemo {
    public static void main(String[] args) throws IOException {
        String dir = "d:" + File.separator + "Ecplise-workspace" + File.separator + "JavaTest" + File.separator + "src"
                + File.separator + "IOPackage" + File.separator + "RandomAccessFileDemo.java";
        File f = new File(dir);
        RandomAccessFile raf = new RandomAccessFile(f, "rw");
        //readLine()方法,不管保存数据的是什么编码,都会转换成ISO-8859-1,就可能会出现乱码,特别是中文字符
        //所以需要进行转码
        while(null != (raf.readLine())) {
            System.out.println(new String(raf.readLine().getBytes("ISO-8859-1"), "utf-8"));
        }
        raf.close();
    }
}

  注意:RandomAccessFile中指针会随着你对文件的操作移动,操作的时候要注意指针的位置。
  RandomAccessFile的readUTF()和writeUTF()方法,必须是成对使用的,readUTF()读的必须是writeUTF()写的。

ByteArrayInputStream和ByteArrayOutputStream

  ByteArrayOutputStream在创建实例时,程序内部创建一个byte型数组的缓冲区,然后利用By特ArrayOutputStream和ByteArrayInputStream的实例向数组写入或读出byte型数据。在网络传输中我们往往要传输很多变量。可以利用ByteArrayOutputStream把所有的变量收集到一起,然后一次性把数据发送出去。
  ByteArrayOutputStream把内存中的数据读到字节数组中,而ByteArrayInputStream又把数组中的字节数以流的形式读出,实现对统一字节数组的操作。综合DataOutputStream和DataInputStream的作用与ByteArrayInputStream和ByteArrayOutputStream使用更方便。
  ByteArrayInputStream

import java.io.ByteArrayInputStream;
import java.io.IOException;

public class ByteArrayInputStreamTest {
    public static void main(String[] args) throws IOException {
        String str = "hello world";
        byte[] b = str.getBytes();

        //ByteArrayInputStream(byte[] buf) //使用创建者预设的buf作为其缓冲区数组,通常buf就是数据源
        //ByteArrayInputStream(byte[] buf, int offset, int lenght) //使用buf作为其缓冲区数组,参数offset指定从数组中开始读取数据的起始下标位置,lenght指定从数组中读取的字节数。
        ByteArrayInputStream bais = new ByteArrayInputStream(b);
        int i = 0;
        //读方式一:
//      while((i = bais.read()) != -1) {
//          System.out.print((char)i);
//      }

        //读方式二:
        byte[] buf = new byte[1024];
        while((i = bais.read(buf)) != -1) {
            System.out.println(new String(buf, 0, i));
        }
        //close()方法无法关闭ByteArrayInputStream
        bais.close();
    }
}

  ByteArrayOutputStream

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class ByteOutputStream {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        String str = "hello world java";
        byte[] b = str.getBytes();
        File f = new File("d:\\1024.txt");
        FileOutputStream fos = new FileOutputStream(f);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        //写出方式一:
//      //读取输出流
//      baos.write(b);
//      //将byte数组输出流中的所有数据写到指定的输出流中
//      baos.writeTo(fos);

        //写出方式二:
        baos.write(b);  
        baos.writeTo(fos);

        //可以通过toString()方法将输出流转换为字符串
        System.out.println(baos.toString());

        fos.close();
        //close()方式无效
        baos.close();
    }

}

DataInputStream和DataOutputStream

  DataInputStream

import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class DataInputStreamTest {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        String strFile = "d:" + File.separator + "DataOutputStream.txt";
        File f = new File(strFile);
        DataInputStream dis = new DataInputStream(new FileInputStream(f));
        byte[] b = new byte[1024];
        int buf = 0;
        while(-1 != (buf = (dis.read(b)))) {
            System.out.print(new String(b, 0, buf));
        }
    }

}

  DataOutputStream

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class DataOutputStreamTest {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        String strFile = "d:" + File.separator + "DataOutputStream.txt";
        File f = new File(strFile);
        DataOutputStream dos = new DataOutputStream(new FileOutputStream(f));
        String str = "hello world java";
        dos.writeBytes(str);
        //DataOutputStream要和DataInputStream配合使用
        //JAVA中的char是16位的,一个char存储一个中文字符,直接用writeBytes方法转换会变为8位,直接导致高8位丢失。从而导致中文乱码。
        //所以下面先字符串先转换成byte数组,中文就不会出现乱码
        dos.write("写入记事本内容".getBytes());
        //直接写入中文,乱码
        dos.writeBytes("写入记事本内容");
        dos.writeBytes("写入记事本内容");
        dos.writeBytes("写入记事本内容");
        dos.writeBytes("写入记事本内容");
        dos.flush();
        dos.close();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的公寓报修管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本公寓报修管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此公寓报修管理系统利用当下成熟完善的Spring Boot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。公寓报修管理系统有管理员,住户,维修人员。管理员可以管理住户信息和维修人员信息,可以审核维修人员的请假信息,住户可以申请维修,可以对维修结果评价,维修人员负责住户提交的维修信息,也可以请假。公寓报修管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:公寓报修管理系统;Spring Boot框架;MySQL;自动化;VUE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值