IO特殊操作流:标准输入输出流、字节打印流及字符打印流

简介: IO特殊操作流:标准输入输出流、字节打印流及字符打印流的简单示例

 一、标准输入流

public static final InputStream in:标准输入流。通常该流对应于键盘输入或由主机环境或用户指定的另个输入源

自己实现键盘录入数据:

public class SystemInDemo {
    public static void main(String[] args) throws IOException {
        //public static final InputStream in:标准输入流 
        InputStream is = System.in;
        int by;
        while ((by = is.read()) != -1) {
            System.out.print((char) by);
        }
        //如何把字节流转换为字符流?用转换流 
        InputStreamReader isr = new InputStreamReader(is);
        //使用字符流能不能够实现一次读取一行数据呢?可以 
        //但是,一次读取一行数据的方法是字符缓冲输入流的特有方法 
        BufferedReader br = new BufferedReader(isr);
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("请输入一个字符串:");
        String line = br.readLine();
        System.out.println("你输入的字符串是:" + line);
        System.out.println("请输入一个整数:");
        int i = Integer.parseInt(br.readLine());
        System.out.println("你输入的整数是:" + i);
        //自己实现键盘录入数据太麻烦了,所以Java就提供了一个类供我们使用 
        Scanner sc = new Scanner(System.in);
    }
}

image.gif

二、标准输出流

public static final PrintStream out:标准输出流。通过该流对应于显示输出或主机环境或用户指定的另一个输出目标

输出语句的本质:是一个标准的输出流

PrintStream ps = System.out;

PrintStream类有的方法,System.out都可以使用

示例代码:

public class SystemOutDemo { 
    public static void main(String[] args) {
        //public static final PrintStream out:标准输出流 
        PrintStream ps = System.out; 
        //能够方便地打印各种数据值 
        ps.print("hello"); 
        ps.print(100); 
        ps.println("hello"); 
        ps.println(100); 
        //System.out的本质是一个字节输出流 
        System.out.println("hello"); 
        System.out.println(100); 
        System.out.println(); 
        // System.out.print(); 
    } 
}

image.gif

三、字节打印流

打印流分类:

字节打印流:PrintStream

字符打印流:PringWriter

打印流的特点:

只负责输出数据,不负责读取数据

永远不会抛出IOException

有自己的特有方法

字节打印流:

PrintStream(String fileName):使用指定的文件名创建新的打印流

使用继承父类的方法写数据,查看的时候会转码;使用自己特有方法写数据,查看数据原样输出

可以输出语句的目的地

public static void setOut(PrintStream out):重新分配"标准"输出流

示例代码:

public class PrintStreamDemo { 
    public static void main(String[] args) throws IOException { 
        //PrintStream(String fileName):使用指定的文件名创建新的打印流 
        PrintStream ps = new PrintStream("myOtherStream\\ps.txt"); 
        //写数据 
        //字节输出流有的方法 
        // ps.write(97); 
        //使用特有方法写数据 
        // ps.print(97); 
        // ps.println(); 
        // ps.print(98); 
        ps.println(97);
        ps.println(98); 
        //释放资源 
        ps.close(); 
    } 
}

image.gif

四、字符打印流

字符打印流构造方法

方法名 说明
PrintWriter(String file Name) 使用指定的文件名创建一个新的PrintWrite,而不需要自动执行刷新
PrintWriter(Writer out,boolean autoFlush) 创建一个新的PrintWriter out:字符输出流autoFlush:一个布尔值,如果为真,则println,printf,或format方法将刷新输出缓冲区

示例代码:

public class PrintWriterDemo {
    public static void main(String[] args) throws IOException {
        //PrintWriter(String fileName) :使用指定的文件名创建一个新的PrintWriter,而 
        // 不需要自动执行行刷新
        // PrintWriter pw = new PrintWriter("myOtherStream\\pw.txt"); 
        // pw.write("hello"); 
        // pw.write("\r\n"); 
        // pw.flush(); 
        // pw.write("world"); 
        // pw.write("\r\n"); 
        // pw.flush(); 
        // pw.println("hello"); 
        /* 
            pw.write("hello"); 
            pw.write("\r\n"); 
        */
        // pw.flush(); 
        // pw.println("world"); 
        // pw.flush(); 
        //PrintWriter(Writer out, boolean autoFlush):创建一个新的PrintWriter 
        PrintWriter pw = new PrintWriter(new FileWriter("myOtherStream\\pw.txt"),true);
        // PrintWriter pw = new PrintWriter(new 
        FileWriter("myOtherStream\\pw.txt"),false);
        pw.println("hello"); 
        /*
            pw.write("\r\n"); 
            pw.flush(); 
        */
        pw.println("world");
        pw.close();
    }
}

image.gif

五、复制Java文件打印流改进

需求:

把模块目录下的PrintStreamDemo.java 复制到模块目录下的 Copy.java

分析步骤:

根据数据源创建字符输入流对象

根据目的地创建字符输出流对象

读写数据,复制文件

释放资源

代码实现:

public class CopyJavaDemo {
    public static void main(String[] args) throws IOException { 
        /*
        //根据数据源创建字符输入流对象 
        BufferedReader br = new BufferedReader(new 
        FileReader("myOtherStream\\PrintStreamDemo.java")); 
        //根据目的地创建字符输出流对象 
        BufferedWriter bw = new BufferedWriter(new 
        FileWriter("myOtherStream\\Copy.java")); 
        //读写数据,复制文件 
        String line; 
        while ((line=br.readLine())!=null) { 
        bw.write(line); 
        bw.newLine(); 
        bw.flush(); 
        }
        //释放资源 
        bw.close(); 
        br.close(); 
        */
        //根据数据源创建字符输入流对象 
        BufferedReader br = new BufferedReader(new FileReader("myOtherStream\\PrintStreamDemo.java"));
        //根据目的地创建字符输出流对象 
        PrintWriter pw = new PrintWriter(new FileWriter("myOtherStream\\Copy.java"), true);
        //读写数据,复制文件 
        String line;
        while ((line = br.readLine()) != null) {
            pw.println(line);
        }
        //释放资源 
        pw.close();
        br.close();
    }
}

image.gif


目录
相关文章
|
6月前
|
存储 Linux API
Linux应用开发基础知识——文件IO操作(三)
Linux应用开发基础知识——文件IO操作(三)
83 2
Linux应用开发基础知识——文件IO操作(三)
|
6月前
|
存储 算法 Java
从零开始学习 Java:简单易懂的入门指南之IO序列化、打印流、压缩流(三十三)
从零开始学习 Java:简单易懂的入门指南之IO序列化、打印流、压缩流(三十三)
|
6月前
|
数据采集 异构计算
LabVIEW编程LabVIEW开发高级数据采集技术 操作数字IO 例程与相关资料
LabVIEW编程LabVIEW开发高级数据采集技术 操作数字IO 例程与相关资料
91 22
|
6月前
|
存储 算法 C语言
【C++入门到精通】C++的IO流(输入输出流) [ C++入门 ]
【C++入门到精通】C++的IO流(输入输出流) [ C++入门 ]
115 0
|
4月前
|
存储 Java
JaveSE—IO流详解:对象输入输出流(序列化及反序列化)
JaveSE—IO流详解:对象输入输出流(序列化及反序列化)
|
5月前
|
缓存 NoSQL Redis
redis管道操作(节省网络IO开销)
pipeline中发送的每个command都会被server立即执行,如果执行失败,将会在此后的响应中得到信息;也就是pipeline并不是表达“所有command都一起成功”的语义,管道中前面命令失败,后面命令不会有影响,继续执行。
47 1
|
6月前
|
Java
|
6月前
|
消息中间件 关系型数据库 Kafka
实时计算 Flink版操作报错之在执行任务时遇到了一个IO错误,具体表现为无法从本地主机(localhost)下载文件,该怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
6月前
|
监控 Java
Java一分钟之-NIO:非阻塞IO操作
【5月更文挑战第14天】Java的NIO(New IO)解决了传统BIO在高并发下的低效问题,通过非阻塞方式提高性能。NIO涉及复杂的选择器和缓冲区管理,易出现线程、内存和中断处理的误区。要避免这些问题,可以使用如Netty的NIO库,谨慎设计并发策略,并建立标准异常处理。示例展示了简单NIO服务器,接收连接并发送欢迎消息。理解NIO工作原理和最佳实践,有助于构建高效网络应用。
79 2
|
6月前
|
存储 Go 数据处理
Golang简单实现IO操作
Golang简单实现IO操作
53 1