JAVA笔记15 其他流

JAVA笔记15 其他流

高效字符流
 // BufferedReader从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
        //
        // 可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。
        BufferedReader bfr = new BufferedReader(new FileReader("a.txt"));
        BufferedWriter bfw = new BufferedWriter(new FileWriter("aa.txt"));

        char[] chars = new char[1024];
        int len = 0;
        while ((len=bfr.read(chars)) != -1) {
            bfw.write(chars, 0, len);
            bfw.flush();
        }

        bfr.close();
        bfw.close();

    }
}

//BufferedReader 他有一个特有的方法,readLine() 一次读取一行内容
        //bfr.readLine()
       // bfw.write("\r\n");
        //bfw.newLine(); //写一个换行符
        //读取一行,写出一行来复制
        String line=null;
        while ((line=bfr.readLine())!=null){
            bfw.write(line);
            bfw.newLine(); //写出一个换行符,具有平台兼容性
            bfw.flush();
        }

        bfr.close();
        bfw.close();
Scanner
//InputStream in = System.in; //in 关联的是键盘
        //Scanner scanner = new Scanner(in);
        //Scanner(File source)
        //构造一个新的 Scanner,它生成的值是从指定文件扫描的。
        //
        //Scanner(InputStream source)
        //构造一个新的 Scanner,它生成的值是从指定的输入流扫描的。

        Scanner scanner = new Scanner(new File("username.txt"));
        while (scanner.hasNextLine()){
            String s = scanner.nextLine();
            System.out.println(s);
        }

        System.out.println("---------------------------");
        Scanner scanner2 = new Scanner(new FileInputStream("username.txt"));

        while (scanner2.hasNextLine()) {
            String s = scanner2.nextLine();
            System.out.println(s);
        }

    }
}

内存操作流

 //内存操作流,不关联任何文件,只是内存中对数据进行读写

        //a:
        //操作字节数组
        //ByteArrayOutputStream
        //ByteArrayInputStream
        //此流关闭无效,所以无需关闭
        //b:
        //操作字符数组
        // CharArrayWrite
        //CharArrayReader
        //c:
        //操作字符串
        //StringWriter
        //StringReader

        //ByteArrayOutputStream
        //此类实现了一个输出流,其中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray () 和 toString () 获取数据。
        //
        //关闭 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);

       // String s = out.toString();
       // System.out.println(s);
       //
        out.close(); //此流无需关闭
       //
       // out.write("abc".getBytes());
       //
       // String s2 = out.toString();
       // System.out.println(s2);

        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);

    }
}

数据输入输出流
//数据输入输出流的特点,就是能够读写基本数据类型
       // DataInputStream
       // DataOutputStream
        //writeData();
        //怎么写的就怎么读,顺序不要乱
        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);

        in.close();


    }

    private static void writeData() throws IOException {
        DataOutputStream out = new DataOutputStream(new FileOutputStream("a.txt"));
        out.writeBoolean(true);
        out.writeDouble(3.14);
        out.writeInt(100);
        out.writeUTF("你好世界");
        out.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");

    }
}



 //参数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();
    }
}

键盘录入的第二种方式

public class 键盘录入的第二种方式 {
    public static void main(String[] args) throws IOException {
        //Scanner scanner = new Scanner(System.in);
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        while (true){
            System.out.println("请输入数据");
            String s = reader.readLine();
            //自定义一个结束标记
            if("886".equals(s)){
                break;
            }
            System.out.println(s);
        }
    }
}
序列化
 //序列化:把对象保存到,硬盘上
        //反序列化:把对象读取到内存中
        //ObjectOutputStream 序列化流
       // ObjectInputStream  反序列化流
        //1.把一个对象,序列化的硬盘上,有个要求,要求该类实现一个Serializable接口,然后该类的对象,才能正常序列化
        //2.再实现了Serializable接口之后,最好再写一个 public static final long serialVersionUID = 42L;
        //writeObj();
        readObj();

    }

    private static void readObj() throws IOException, ClassNotFoundException {
        ObjectInputStream objin = new ObjectInputStream(new FileInputStream("student.txt"));
        Object obj = objin.readObject();
        Student student= (Student) obj;
        System.out.println(student.getName());
        System.out.println(student.getAge());
    }

    private static void writeObj() throws IOException {
        Student student = new Student("zhangsan",23);
        ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("student.txt"));
        out.writeObject(student);
        out.close();
    }
}

// Properties 属性集合,经常用它来读写配置文件 属于双列集合
        Properties properties = new Properties();//他规定了键值 是String类型
        //properties.put("aaa","bbb");
        //Object aaa = properties.get("aaa");
        //System.out.println(aaa);
        //用它特有的方法,来存储键值
        properties.setProperty("陈羽凡","白百合");
        String value = properties.getProperty("陈羽凡");
        System.out.println(value);
        //参数2,默认值,如果键没有找到对应的值,就返回默认值
        String property = properties.getProperty("陈羽凡", "李小璐");
        System.out.println(property);

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值