JAVASEday14 IO之其他流

数据输入输出流

DataInputStream和DataOutputStream
特点:能够读写基本数据类型

构造方法:
DataInputStream(InputStream in)
使用指定的底层 InputStream 创建一个 DataInputStream。
DataOutputStream(OutputStream out)
创建一个新的数据输出流,将数据写入指定基础输出流。

DataInputStream in = new DataInputStream(new FileInputStream("a.txt"));
        boolean b = in.readBoolean();
        double v = in.readDouble();
        int i = in.readInt();
        String s = in.readUTF();
        System.out.println(b);
        System.out.println(v);
        System.out.println(i);
        System.out.println(s);
 DataOutputStream out = new DataOutputStream(new FileOutputStream("a.txt"));
        out.writeBoolean(true);
        out.writeDouble(3.14);
        out.writeInt(100);
        out.writeUTF("你好世界");
        out.close();

内存操作流

  • 操作字节数组 ByteArrayOutputStream和ByteArrayInputStream
    关闭 ByteArrayOutputStream 无效。此类中的方法在关闭此流后仍可被调用,而不会产生任何 IOException
ByteArrayOutputStream out = new ByteArrayOutputStream();
        out.write("横眉冷对千夫指".getBytes());
        out.write("俯首甘为孺子牛".getBytes());
        //取出缓冲区中的数据
        byte[] allBytes = out.toByteArray();
        String s = new String(allBytes);
        System.out.println(s);
        
        ByteArrayInputStream in= new ByteArrayInputStream(allBytes);
        byte[] bytes=new byte[1024*8];
        int len = in.read(bytes);
        String s1 = new String(bytes, 0, len);
        System.out.println(s1);
  • 操作字符数组 CharArrayWrite和CharArrayReader
 CharArrayWriter writer = new CharArrayWriter();
        writer.write("abc");
        writer.write("abc");
        writer.write("abc");
        writer.write("abc");
        writer.write("abc");
        //取出缓冲区中的数据
        char[] chars = writer.toCharArray();
        System.out.println(String.valueOf(chars));
        System.out.println(new String(chars));
        System.out.println(writer.toString());
  • 操作字符串 StringWriter和StringReader
 StringWriter stringWriter = new StringWriter();
        stringWriter.write("abc");
        stringWriter.append("abc");
        String s = stringWriter.toString();
        System.out.println(s);

使用内存操作流合并歌曲

 FileInputStream in1 = new FileInputStream("许巍 - 曾经的你.mp3");
        FileInputStream in2 = new FileInputStream("许巍 - 蓝莲花.mp3");
        FileOutputStream out = new FileOutputStream("歌曲大联唱.mp3");

        ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
        //创建一个集合
        ArrayList<FileInputStream> list = new ArrayList<>();
        list.add(in1);
        list.add(in2);
        int len=0;
        byte[] bytes = new byte[1024 * 8];
        for (FileInputStream in : list) {
            while ((len=in.read(bytes))!=-1){
                byteOut.write(bytes,0,len);
                byteOut.flush();
            }
            in.close();
        }

        //取出两首歌的字节数据
        byte[] allBytes = byteOut.toByteArray();
        System.out.println(allBytes.length);
        //将两首歌的字节数据,写到硬盘上

        ByteArrayInputStream byteIn = new ByteArrayInputStream(allBytes);
        int len2 = 0;
        byte[] bytes2 = new byte[1024 * 8];

        while ((len2 = byteIn.read(bytes)) != -1) {
            out.write(bytes, 0, len2);
            out.flush();
        }

        out.close();

字符打印流PrintWriter

//参数2:true 自动刷新
        //如果启用了自动刷新,则只有在调用 println、printf 或 format 的其中一个方法时才可能完成此操作
        PrintWriter writer = new PrintWriter(new FileOutputStream("c.txt"),true);
        //writer.write("字符打印流");
        writer.println("abc");
        writer.println("abc");
        writer.println("abc");
        writer.println("abc");
        writer.println("abc");
        writer.println("abc");
        writer.println("abc");
       writer.flush();
       writer.close();

字节打印流

//打印流:只操作目的地,不关联源文件
      //  PrintStream 字节打印流
        PrintStream printStream = new PrintStream(new FileOutputStream("b.txt"));
        printStream.write("字节打印流".getBytes());
        printStream.print(true);
        printStream.println(100);

        printStream.close();

        PrintStream out = System.out;
        out.write("abc".getBytes());
        out.println(3.14);
        System.out.println("abc");

利用打印流复制文本文件

BufferedReader reader = new BufferedReader(new FileReader("内存操作流.java"));

        PrintWriter printWriter = new PrintWriter(new FileOutputStream("aa.java"),true);
        String line=null;
        while ((line=reader.readLine())!=null){
          printWriter.println(line);
        }
        reader.close();
        printWriter.close();

随机访问流RandomAccessFile

此流的特点,能读能写,有一个文件指针,能够记录文件读写的位置
此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为文件指针;
rw 模式,可读可以写
writeData();
你怎么写的,就怎么读取 顺序不要乱

		RandomAccessFile ra = new RandomAccessFile(new File("e.txt"), "rw");
        boolean b = ra.readBoolean();
        //获取文件指针的位置
        long filePointer = ra.getFilePointer();
        System.out.println(filePointer);//1
        double v = ra.readDouble();
        filePointer = ra.getFilePointer();
        System.out.println(filePointer);//9
        int i = ra.readInt();
        filePointer = ra.getFilePointer();
        System.out.println(filePointer);//13
        char c = ra.readChar();
        filePointer = ra.getFilePointer();
        System.out.println(filePointer);//15
        String s = ra.readUTF();
        filePointer = ra.getFilePointer();
        System.out.println(filePointer);//
        System.out.println(b);
        System.out.println(v);
        System.out.println(i);
        System.out.println(s);

        //设置指针的位置
        ra.seek(15);
        String s1 = ra.readUTF();
        System.out.println(s1);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值