Java输入输出流进阶

简介:

输入输出的内容是文本内容,考虑使用字符流。

输入输出的内容是二进制内容,考虑使用字节流。

凡是能用记事本打开并查看的内容称为文本文件,反之则为二进制文件。

package ch15;

import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;

/**
 * Created by Jiqing on 2016/12/30.
 */
public class StringNodeTest {
    public static void main(String[] args) throws IOException{
        String src = "从明天起,做一个幸福的人\n"
                + "喂马,劈柴,周游世界\n"
                + "从明天起,关心粮食和蔬菜\n"
                + "我有一所房子,面朝大海,春暖花开\n";

        char[] buffer = new char[32];
        int hasRead = 0;
        try(StringReader sr = new StringReader(src)) {
            // 采用循环读取的方式读取字符串
            while ((hasRead = sr.read(buffer)) > 0) {
                System.out.print(new String(buffer,0,hasRead));
            }
        }

        try (
                // 创建StringWriter
                StringWriter sw = new StringWriter()) {
            sw.write("有一个美丽的新世界,\n");
            sw.write("她在远方等我!\n");
            System.out.print(sw.toString());
        }
    }
}

敲代码的时候,可以把代码区域拎出来,简洁明了。

转换流

InputStreamReader将字节输入流转为字符输入流,OutputStreamWriter将字节输出流转化为字符输出流。

package ch15;

import ch4.While;

import java.io.*;

/**
 * Created by Jiqing on 2016/12/30.
 */
public class KeyinTest {
    public static void main(String[] args) {
        try(
                InputStreamReader reader = new InputStreamReader(System.in);
                BufferedReader br  = new BufferedReader(reader)) {
            String line = null;
            while ((line = br.readLine()) != null)
            {
                if (line.equals("exit")) {
                    System.exit(1);
                }

                System.out.println("输入内容为:" + line);
            }
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }
}

推回输入流

PushbackInputStream和PushbackReader,将字节字符推回缓冲区,允许重复读取刚刚读取的内容。

标准输入、输出

System.in System.out默认情况下分别代表键盘和显示器。

方法论:先看一遍,了解思路大概。尝试自己不看代码,写出来。那才是真正属于自己的知识。

package ch15;

import java.io.*;

/**
 * Created by Jiqing on 2016/12/30.
 */
public class RedirectOut {
    public static void main(String[] args) {
        try(
                PrintStream ps = new PrintStream(new FileOutputStream("out.txt"))) {
            System.setOut(ps);
            System.out.print("普通字符串");
            System.out.print(new RedirectOut());
        } catch(IOException ioe) {
            ioe.printStackTrace();
        }
    }
}

方法论:如果一时半会达不到自己独立写出来,那就重复重复再重复。书读百遍,其义自见。

上边的重定向,将内容写入了out.txt文档中了。而没有输出到显示器。

package ch15;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Scanner;

/**
 * Created by Jiqing on 2016/12/30.
 */
public class RedirectIn {
    public static void main(String[] args) {
        File file = new File(".");
        try(FileInputStream fis = new FileInputStream(file.getAbsoluteFile().getParent()+"/src/ch15/RedirectIn.java")) {
            System.setIn(fis);
            Scanner sc = new Scanner(System.in);
            sc.useDelimiter("\n");
            while(sc.hasNext()) {
                System.out.println("键盘输入的内容是:"+sc.next());
            }
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }
}

方法论:编程在于敲代码,感受代码。手感很重要。一方面能够增强信心,一方面能够增加记忆与乐趣。但是也没必要很死板,统统都敲一遍。挑一些代表性的,感受一下就行了。

读取进程数据

package ch15;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * Created by Jiqing on 2016/12/30.
 */
public class ReadFromProcess {
    public static void main(String[] args) throws IOException{
        Process p = Runtime.getRuntime().exec("javac");
        try(
                BufferedReader br = new BufferedReader(new InputStreamReader(p.getErrorStream(),"gbk"))
                ) {
            String buff = null;
            while ((buff = br.readLine()) != null) {
                System.out.println(new String(buff));
            }
        }
    }
}


本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/6238563.html如需转载请自行联系原作者

相关文章
|
6月前
|
存储 Java 索引
Java学习—IO流
Java学习—IO流
|
存储 Java 开发者
java进阶-第8章-IO流(二)
缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写的效率。
44 0
|
5月前
|
存储 算法 NoSQL
JAVA—IO流知识点总结
JAVA—IO流知识点总结
|
存储 Java 索引
java进阶-第8章-IO流(一)
因为内置缓冲区的原因,如果不关闭输出流,无法写出字符到文件中。但是关闭的流对象,是无法继续写出数据的。如果我们既想写出数据,又想继续使用流,就需要flush 方法了。
36 0
|
存储 移动开发 Java
Java IO流超详细笔记
Java IO流超详细笔记
114 1
|
存储 Java
Java进阶——IO流(II)
序列化和反序列化 1. 序列化就是在保存数据时,保存数据的值和数据类型 2. 反序列化就是在恢复数据时,恢复数据的值和数据类型 3. 需要让某个对象支持序列化,必须让其类是可序列化的,必须实现如下两个接口之一:Serializable(标记接口)和Externalizable
83 0
|
Java API
Java进阶——IO流(I)
流:数据在数据源(文件)和程序(内存)之间经历的路径 输入流:数据从数据源(文件)到程序(内存)的路径 输入流:数据从程序(内存)到数据源(文件)的路径
89 0
|
存储 Java API
Java进阶部分详解(七)--->IO流
Io流部分我看的是B站韩顺平 io流合集
139 0
|
缓存 Java
|
存储 算法 安全
25、JAVA进阶——输入输出流
25、JAVA进阶——输入输出流
242 0
25、JAVA进阶——输入输出流
下一篇
无影云桌面