moc 发表于 2019-1-9 13:27:23

Java-027 IO流之数据、内存、打印流

本帖最后由 moc 于 2019-1-9 13:27 编辑

1、数据操作流
IO包中提供了两个与平台无关的数据操作流,可以读写基本数据类型的数据。
数据输出流: DataOutputStream
数据输入流: DataInputStream
        ① 通常按照一定格式将输入输出,再按照一定格式将数据输入;
        ② 要想使用数据输出流和输入流,则肯定要用户指定数据的保存格式;
        ③ 必须按指定的格式保存数据,才可以将数据输入流将数据读取进来。
public static void main(String[] args) throws IOException {       
        write();// 写
        read();   // 读
}

private static void read() throws IOException {
        // 创建数据输入流对象
        DataInputStream dis = new DataInputStream(new FileInputStream("dos.txt"));

        byte b = dis.readByte();   // 读数据
        short s = dis.readShort();
        int i = dis.readInt();
        long l = dis.readLong();
        float f = dis.readFloat();
        double d = dis.readDouble();
        char c = dis.readChar();
        boolean bb = dis.readBoolean();

        dis.close();// 释放资源
}
private static void write() throws IOException {
        // 创建数据输出流对象
        DataOutputStream dos = new DataOutputStream(new FileOutputStream("dos.txt"));

        dos.writeByte(10);// 写数据
        dos.writeShort(100);
        dos.writeInt(1000);
        dos.writeLong(10000);
        dos.writeFloat(12.34F);
        dos.writeDouble(12.56);
        dos.writeChar('a');
        dos.writeBoolean(true);

        dos.close();        // 释放资源
}2、内存操作流
用于处理临时存储信息的,程序结束,数据就从内存中消失。
① 字节数组:
        ByteArrayInputStream
        ByteArrayOutputStream
② 字符数组:
        CharArrayReader
        CharArrayWriter
③ 字符串:
        StringReader
        StringWriter
注意: 跟文件读取不一样,内存操作流不要设置文件路径。
// 写数据
ByteArrayOutputStream baos = new ByteArrayOutputStream();
for (int x = 0; x < 10; x++) {
        baos.write(("hello" + x).getBytes());
}
// 读数据
byte[] bys = baos.toByteArray();
ByteArrayInputStream bais = new ByteArrayInputStream(bys);
int by = 0;
while ((by = bais.read()) != -1) {
        System.out.print((char) by);
}3、打印流
1. 字节流打印流       PrintStream
    字符打印流   PrintWriter
2. 特点
        ① 只有写数据的,没有读取数据。只能操作目的地,不能操作数据源。
        ② 可以操作任意类型的数据。
        ③ 如果启动了自动刷新,能够自动刷新。
        ④ 该流是可以直接操作文本文件的。
3. 方法
1> 可以操作任意类型的数据。 print()---println()
2> 启动自动刷新
PrintWriter pw = new PrintWriter(new FileWriter("xxx.txt"), true);
        还应该调用println()的方法才可以; 这个时候不仅仅自动刷新了,还实现了数据的换行。
println()等价于于:bw.write();+bw.newLine();+bw.flush();
PrintWriter pw = new PrintWriter(new FileWriter("pw2.txt"), true);
pw.println("hello");
pw.println(true);
pw.println(100);
pw.close();复制文件案例:
// 封装数据源
BufferedReader br = new BufferedReader(new FileReader("DataStreamDemo.java"));
// 封装目的地
PrintWriter pw = new PrintWriter(new FileWriter("Copy.java"), true);

String line = null;
while((line=br.readLine())!=null){
        pw.println(line);
}
pw.close();
br.close();
页: [1]
查看完整版本: Java-027 IO流之数据、内存、打印流