鱼C论坛

 找回密码
 立即注册
查看: 2411|回复: 0

[学习笔记] Java-027 IO流之数据、内存、打印流

[复制链接]
发表于 2019-1-9 13:27:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

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

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

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

  21.         dos.writeByte(10);  // 写数据
  22.         dos.writeShort(100);
  23.         dos.writeInt(1000);
  24.         dos.writeLong(10000);
  25.         dos.writeFloat(12.34F);
  26.         dos.writeDouble(12.56);
  27.         dos.writeChar('a');
  28.         dos.writeBoolean(true);

  29.         dos.close();          // 释放资源
  30. }
复制代码
2、内存操作流
用于处理临时存储信息的,程序结束,数据就从内存中消失。
① 字节数组:
        ByteArrayInputStream
        ByteArrayOutputStream

② 字符数组:
        CharArrayReader
        CharArrayWriter

③ 字符串:
        StringReader
        StringWriter

注意: 跟文件读取不一样,内存操作流不要设置文件路径。
  1. // 写数据
  2. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  3. for (int x = 0; x < 10; x++) {
  4.         baos.write(("hello" + x).getBytes());
  5. }
  6. // 读数据
  7. byte[] bys = baos.toByteArray();
  8. ByteArrayInputStream bais = new ByteArrayInputStream(bys);
  9. int by = 0;
  10. while ((by = bais.read()) != -1) {
  11.         System.out.print((char) by);
  12. }
复制代码
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();
  1. PrintWriter pw = new PrintWriter(new FileWriter("pw2.txt"), true);
  2. pw.println("hello");
  3. pw.println(true);
  4. pw.println(100);
  5. pw.close();
复制代码
复制文件案例:
  1. // 封装数据源
  2. BufferedReader br = new BufferedReader(new FileReader("DataStreamDemo.java"));
  3. // 封装目的地
  4. PrintWriter pw = new PrintWriter(new FileWriter("Copy.java"), true);

  5. String line = null;
  6. while((line=br.readLine())!=null){
  7.         pw.println(line);
  8. }
  9. pw.close();
  10. br.close();
复制代码

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-24 13:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表