美文网首页
IO流之随机访问流和转换流

IO流之随机访问流和转换流

作者: 守住阳光 | 来源:发表于2018-06-28 16:45 被阅读0次

            本文介绍java IO几种比较重要的流,随机访问流,转换流。

    一、随机访问流

            RandomAccessFile,此类的实例支持对文件的随机访问和读取和写入。

            在执行new RandomAccessFile() 方法之后,若文件不存在则会自动创建文件,存在则不创建。

            该类内部既封装了字节输入流,又封装了字节输出流。若write() 方法写整数,每次只写它的最后一个字节。而采用 writeInt() 方法,则可把一个整数完整地写入。通过 seek() 方法设置数据的指针就可以实现对文件数据的随机读写。构造方法如下:

            其中mode的取值以及对应的意义:

            “r”:以只读方式打开。调用结果对象的任何write方法都将导致抛出IOException。

            “rw”:打开以便读取和写入。如果该文件不存在,则尝试创建该文件。

            “rws”:打开以便读取和写入,对于rw,还要求对文件内容或元数据的每个更新都同步写入到底层存储设备。

            “rwd”:打开以便读取和写入,对于rw,还要求对文件内容的每个更新都同步写入到底层存储设备。

    简单示例:

    public class RandomFileDemo1 {

            public static void main(String[] args) throws Exception{

                RandomAccessFile raf = new RandomAccessFile("D:\\yl1.txt","rw");

                //raf.write(97);

                System.out.println(raf.read());

                raf.close();

            }

    }

            输出结果为:97.

    来试试seek()方法:

    public class RandomFileDemo1 {

            public static void main(String[] args) throws Exception{

                RandomAccessFile raf = new RandomAccessFile("D:\\yl1.txt","rw");

                raf.write(97);

                raf.seek(3);

                raf.write(98);

                raf.seek(5);

                raf.write(99);

                //System.out.println(raf.read());

                raf.close();

            }

    }

    二、InputStreamReader和OutputStreamWriter

            功能1:充当字节流与字符流之间的桥梁

            下面我们来写一个案例,需求:

            模拟英文聊天程序,

            要求:

            1)从键盘录入英文字符,每录一行就把它转成大写输出到控制台;

            2)保存聊天记录到字节流文件。

           功能2:字符编码转换

           首先,OutputStreamWriter + FileOutputStream +指定编码表,将字符以utf-8编码成字节流后写入文件中,代码如下:

            然后,InputStreamReader + FileInputStream + 指定编码表,使用指定的编码方式,解码读取字节流,代码如下:

    相关文章

      网友评论

          本文标题:IO流之随机访问流和转换流

          本文链接:https://www.haomeiwen.com/subject/fyggyftx.html