`
810364804
  • 浏览: 785901 次
文章分类
社区版块
存档分类
最新评论

一系列的IO操作

 
阅读更多

最近看到IO操作部分,发现这部分比较模糊了,所以又写一个测试程序来帮忙记忆

如下是代码:

package com.demo;


import java.io.*;


/**
* Created with IntelliJ IDEA.
* User: bokee
* Date: 12-10-9
* Time: 下午5:38
* To change this template use File | Settings | File Templates.
*/
public class IOTest {
  public static void main(String[] args)
  {
    IOTest client=new IOTest();
    //client.consoleIO();
   // client.FileIO();
    //client.FileIO2();
    client.stringIO();
    //client.OutTest();
   // client.OutTest2();
    //client.OutTest3();


    client.FileWriterTest();
  }
  /**
  * console控制台输入测试
  */
  public void consoleIO()
  {
    System.out.println("console控制台输入测试 开始!");
    while(true)
    {
      BufferedReader reader=new BufferedReader(new InputStreamReader(System.in)) ;
      try {
        System.out.println(reader.readLine());
      } catch (IOException e) {
        e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
      }
      try {
        reader.close();
      } catch (IOException e) {
        e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
      }
    }
    //System.out.println("console控制台输入测试 结束!");
  }


  /**
  * StringReader测试
  */
  public void stringIO()
  {
    String str="stringIO:阿呆 还是第一 阿!\n换行试试" ;
    StringReader stringReader=new StringReader(str); //从字符串读取数据的推荐做法
    BufferedReader bufferedReader=new BufferedReader(stringReader);
    String str2=null;
    try {
      while((str=bufferedReader.readLine())!=null)
         System.out.println(str);
    } catch (IOException e) {
      e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
    }
  }
  /**
  * 文件读取数据测试 -方式1
  * 直接按字符来读取
  */
  public void FileIO()
  {
    System.out.println("文件读取数据测试-方式1 开始!");
    BufferedReader reader= null;
    try {
      reader = new BufferedReader(new FileReader("data.ini"));
    } catch (FileNotFoundException e) {
      //e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
      System.out.println("File 'data.ini' not found");
    }
    String buffer=null;
    try {
      while (null != (buffer = reader.readLine()))
        System.out.println(buffer);
    } catch (IOException e) {
      e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
    }
    try {
      reader.close();
    } catch (IOException e) {
      e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
    }
    System.out.println("文件读取数据测试-方式1 结束!");
  }


  /**
  * 文件读取数据测试-方式2
  * 先按字节读取,然后转换成字符
  */
  public void FileIO2()
  {
    System.out.println("文件读取数据测试-方式2 开始!");
    BufferedInputStream inputStream=null;
    try {
      inputStream=new BufferedInputStream(new FileInputStream("data.ini"));
    } catch (FileNotFoundException e) {
     // e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
      System.out.println("File 'data.ini' not found");
    }
    InputStreamReader inputStreamReader=new InputStreamReader(inputStream);  //字节转换成字符
    BufferedReader bufferedReader=new BufferedReader(inputStreamReader);
    String buffer=null;
    try {
      while (null != (buffer = bufferedReader.readLine()))
        System.out.println(buffer);
    } catch (IOException e) {
      e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
    }
    try {
      bufferedReader.close();
    } catch (IOException e) {
      e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
    }
    System.out.println("文件读取数据测试-方式2 结束!");
  }


  /**
  * 文件写的测试
  */
  public void FileWriterTest() {
    BufferedWriter bufferedWriter= null;
    try {
      bufferedWriter = new BufferedWriter(new FileWriter("data2.ini",true));
      bufferedWriter.write("阿呆 还是第一 阿!\n");
      bufferedWriter.close();
    } catch (IOException e) {
      e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
    }


  }


  /**
  * 往控制台输出,使用bufferedWriter
  */
  public void OutTest()
  {
    BufferedWriter bufferedWriter=new BufferedWriter(new OutputStreamWriter(System.out)) ;
    try {
      bufferedWriter.write("OutTest:阿呆 还是第一 阿! \n 还在阿!");
      bufferedWriter.newLine();
      /**
      * 使用BufferedWriter的话得手工flush,因此下面使用PrintWriter试试
      * 然而 在 FileWriterTest 里面可以看到,没有flush也是可以的,纳闷????????????????????????????????
      */
      bufferedWriter.flush();
     //bufferedWriter.close();
    } catch (IOException e) {
      e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
    }
  }


  /**
  * 往控制台输出,使用PrintStream
  * 发现write方法无效 ,
  */
  public void OutTest2()
  {
    PrintStream printStream=new PrintStream(System.out,true);
    printStream.println("OutTest2:阿呆 还是第一 阿! \n 还在阿!");
   // printStream.close();


  }


  /**
  * 往控制台输出,使用PrintWriter
  * 然而可以看到必须使用flush才行.
  * 还发现一点, OutTest2和OutTest3无法同时使用
  * 经过一段时间的测试发现导致outTest3无法运行的原因是 printStream.close();
  */
  public void OutTest3()
  {
    PrintWriter printWriter=new PrintWriter(System.out);
    printWriter.println("OutTest3:阿呆 还是第一 阿! \n 还在阿!");
    printWriter.flush();
    //printWriter.close();
  }
}

最近看了IO的源码;现在解释下上面的疑问:

System.out的类型是PrintStream;

1,使用printStream发现writer无效:该方法是private的

2.使用printWriter发现必须使用autoflash才行:

PrintWriter printWriter=new PrintWriter(System.out);
这句话里面的autoflush默认是false,所以才会调用println的时候不会自动的flush,除非这样:

PrintWriter printWriter=new PrintWriter(System.out,true);


分享到:
评论

相关推荐

    网络通信原理:IO流

    java.io包也是Java内置的包,其中包含一系列对文件和目录的属性进行操作,对文件进行读写操作的类;

    PROFINET IO 网络拓扑

    拓扑编辑器具有一系列功能,可用于设置、互连和诊断包括端口在内的所有 PROFINET 设备的属性。可提供下列功能和信息: § 项目中所有 PROFINET 设备及其端口的显示 § 使用计算的信号运行时间,为每个端口组态电缆...

    Draw.io 又名 diagrams

    你可以利用 Draw.io 绘制一系列的图表、图示或图形,包括流程图、UML 类图、组织结构图、泳道图、E-R 图、文氏图等等,适用于商务、工程、电气、网络设计、软件设计等诸多领域的专业绘图。 Draw.io 现已改名为 ...

    国产替代西门子et200sp原厂profinet远程分布式io模块

    BL200系列耦合器是一个数据采集和控制系统,采用Linux操作系统,支持Modbus,MQTT,OPC UA等多种协议,可以快速接入现场PLC、MES、Ignition和SCADA以及ERP系统,同时也能快速连接到AWS云,Thingsboard、华为云以及...

    java知识点总结

    IO操作:结合路径问题用最基础的IO类编写的文件读写删拷贝等一系列操作 正则表达式:源于官方网的一遍报道,里面有自己添加的一些案例等,只要一页,你就能掌握基本的正则表达式 小数格式化:一个工具类,想保留一位...

    Linux运维监控工具,支持系统硬件信息,内存,cpu,温度,磁盘空间及IO,硬盘smart,系统负载,网络流量等监控,服务接口

    今天给大家介绍一款Linux运维监控工具 ——wgcloud,功能非常强大,完全开源! wgcloud支持显示CPU利用率、CPU温度、内存利用率、磁盘容量、磁盘IO、硬盘智能健康状态、系统负载、连接数、网卡流量、硬件系统信息等...

    基于RapidIO总线的VPX标准存储板设计

    针对现代高性能嵌入式系统RapidIO总线信号接入的应用需求,采用K7系列FPGA和mSATA盘设计了一款RapidIO接口存储容量8TB的VPX标准存储板。提出了一种基于AXI总线的RapidIO端口控制器IP核的设计方法。在FPGA内部...

    Pytorch-简单音频io项目源码

    它旨在将 PyTorch 的强大功能应用于音频领域,提供了一系列音频处理工具,使得在 PyTorch 中进行音频相关的机器学习和深度学习任务变得更加便捷。 以下是 torchaudio 的一些关键特性: 音频 I/O 支持:torchaudio ...

    基于Gulp的前端自动化.pdf

    gulp.js 是一种基于流的,代码优于配置的新一代构建工具。 Gulp 和 Grunt 类似。但相比于 Grunt 的频繁的 IO 操作,Gulp 的流操作... 易于学习 通过最少的API,掌握Gulp毫不费力,构建工作尽在掌握:如同一系列流管道。

    Python 数据分析三剑客之 NumPy(六):矩阵 / 线性代数库与 IO 操作

    NumPy 系列文章: Python 数据分析三剑客之 NumPy(一):理解 NumPy / 数组基础 ...Python 数据分析三剑客之 NumPy(六):矩阵 / 线性代数库与 IO 操作 文章目录【1×00】NumPy 矩阵库【1×01】

    GO语io包的常用接口

    本文实例分析了GO语io包的常用接口。分享给大家供大家参考。...以我的经验来说,接口是一个很重要的知识点,是一系列操作的规范,特别是公共接口尤为重要,如:package io 本文仅仅列举最常用的几个接口,如果您

    platform-ststm32:ST STM32:PlatformIO开发平台

    它提供了一个32位产品系列,该产品系列具有非常高的性能,实时功能,数字信号处理以及低功耗,低压操作,同时保持了完整的集成和易于开发的特性。 (PlatformIO平台注册表中的) (高级用法,软件包,开发板,框架...

    LInux Unix Windows 实验室服务器批量管理操作监控软件

    Unix 实验室服务器批量管理监控系统,简称 UnixShellManager UnixShellManager 分简装版, 标准版,企业版。 UnixShellManager 实验室批量管理监控系统,能够实现对 windows ... 等等一系列 服务务器硬件和软件服务。

    python入门到高级全栈工程师培训 第3期 附课件代码

    04 ORM多表操作之一对多查询之双下划线查询 05 ORM多表操作之多对多添加记录 06 ORM多表操作之多对多查询 07 ORM多表操作之F查询与Q查询 08 ORM的querySet集合对象的特性 第53章 01 admin介绍 02 alex首秀失败 03 ...

    windows界面下批量操作,监控管理上万台Linux Unix 服务器

    Windows 下 批量管理,批量监控,批量操作,批量安全扫描 linux Solaris Aix HP-Unix Windows 等操作系统界面最简洁的图形工具。... 等等一系列 服务务器硬件和软件服务。 用户名:Admin 密码:qwe0987

    Window 下批量管理批量操作万台Linux Solaris Aix HP-Unix Windows 服务器图形管理软件

    Windows 下 批量管理,批量监控,批量操作,批量安全扫描 linux Solaris Aix HP-Unix Windows 等操作系统界面最简洁的图形工具。... 等等一系列 服务务器硬件和软件服务。 用户名:Admin 密码:qwe0987

    单片机IO扩展

    .1I/O口扩展的原因MCS-51系列单片机共有四个并行I/O口,分别是P0、P1、 P2和 P3。其中P0口一般作地址线的低八位和数据线使用;P2口 作地址线的高八位使用;P3是一个双功能口,其第二功能是一些很重要的控制信号,...

    ad5665r STM32 GD32 IIC驱动设计,驱动程序在AD公司提供例程上修改得到,IO模拟的方式进行IIC通信

    MCU采用GD32,GD32类似STM32,针对ad566r的时序操作是相同的,IO模拟的方式进行IIC通信 软件工程还移植了FreeRTOS,实现一个闪灯任务,并打开了串口0,用于printf打印输出. 设置电压范围 uint32_t ad5665r_a_value = ...

    浅析C#中文件路径的操作

    在程序中对文件操作是非常常见的,而对文件的操作则不可避免的需要文件的路径,并对文件的路径进行一系列的操作,例如:判断已知的路径是一个目录还是一个文件,路劲是一个文件则该文件的名称是什么,文件的扩展名名...

    StrictModeUtils.java

    StrictMode在Android 2.3(API 9)的时候就已经引入了,虽然到当前这个工具年代比较久远 了,但属实还是非常好用的, 在开发阶段使用这个工具,能够很好的帮助发现开发中的一系列不规范的编码, 例如主线程访问网络...

Global site tag (gtag.js) - Google Analytics