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

94 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第8天,点击查看活动详情

目录

一、标准输入流

二、标准输出流

三、字节打印流

四、字符打印流

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


一、标准输入流

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

二、标准输出流

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

三、字节打印流

打印流分类:

字节打印流: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(); 
    } 
}

四、字符打印流

字符打印流构造方法

方法名说明
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();
    }
}

 五、复制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();
    }
}