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

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

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

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

Java输入输出流进阶的更多相关文章

  1. Java输入/输出流体系

    在用java的io流读写文件时,总是被它的各种流能得很混乱,有40多个类,理清啦,过一段时间又混乱啦,决定整理一下!以防再忘 Java输入/输出流体系 1.字节流和字符流 字节流:按字节读取.字符流: ...

  2. 深入理解Java输入输出流

    Java.io包的File类,File类用于目录和文件的创建.删除.遍历等操作,但不能用于文件的读写. Java 对文件的写入和读取涉及到流的概念,写入为输出流,读取为输入流.如何理解流的概念呢?可以 ...

  3. Java 输入输出流 转载

    转载自:http://blog.csdn.net/hguisu/article/details/7418161 1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所 ...

  4. Java输入输出流(一)——常用的输入输出流

    1.流的概念:在Java中,流是从源到目的地的字节的有序序列.Java中有两种基本的流--输入流(InputStream)和输出流(OutputStream). 根据流相对于程序的另一个端点的不同,分 ...

  5. java 输入输出流1 FileInputStrem&&FileOutStream

    通过文件输入流读取问价 package unit6; import java.io.FileInputStream; import java.io.FileNotFoundException; imp ...

  6. java输入输出流总结 转载

    一.基本概念 1.1 什么是IO?     IO(Input/Output)是计算机输入/输出的接口.Java中I/O操作主要是指使用Java进行输入,输出操作.     Java所有的I/O机制都是 ...

  7. java输入输出流(内容练习)

    1,编写一个程序,读取文件test.txt的内容并在控制台输出.如果源文件不存在,则显示相应的错误信息. package src; import java.io.File; import java.i ...

  8. Java输入输出流(转载)

    转自http://blog.csdn.net/hguisu/article/details/7418161 目录(?)[+] 1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作 ...

  9. 转 Java输入输出流详解(非常详尽)

    转  http://blog.csdn.net/zsw12013/article/details/6534619 通过数据流.序列化和文件系统提供系统输入和输出. Java把这些不同来源和目标的数据都 ...

随机推荐

  1. 内网穿透神器ngrok——将本地项目驾到外网

    相信做Web开发的同学们,经常会遇到需要将本地部署的Web应用能够让公网环境直接访问到的情况,例如微信应用调试.支付宝接口调试等.这个时候,一个叫ngrok的神器可能会帮到你,它提供了一个能够在公网安 ...

  2. Orchard 刨析:Caching

    关于Orchard中的Caching组件已经有一些文章做了介绍,为了系列的完整性会再次对Caching组件进行一次介绍. 缓存的使用 在Orchard看到如下一段代码: 可以看到使用缓存的方法Get而 ...

  3. Android中string.xml文件中设置部分字体颜色大小

    1.在string.xml文件中: <string name="tips_all"><Data><![CDATA[清理进程:<font colo ...

  4. MySQL触发器 Update触发Insert失败

    今天工作需要,想要实现将仅对状态更新的表进行历史记录显示,于是考虑在原表中建立触发器,将更新的内容同时写入另一张表 于是进行测试 --建立测试表CREATE TABLE `triggletest_tr ...

  5. IE下无法保存Cookie和Session问题

    最近在做新的Web项目时,因为一个验证码无法保存在Cookie中,或者更确切地说是IE下无法保存Cookie的问题纠结了整整一天时间,考虑了多种原因,单步调试了不下三十次,也没有结果.甚至在无奈之下改 ...

  6. C#操作Excel的OLEDB方式与COM方式比较

    2013-03-15 13:42:54      作者:有理想的码农   在对Excel进行读写操作时,使用微软自身提供的解决方案,有两种(第三方方式除外),分别是OLEDB方式和调用COM组件的方式 ...

  7. windows phone (16) UI变换 下

    原文:windows phone (16) UI变换 下 上一篇中说到四个变换类,都是比较简单的,这里要说到四个变换类,分别为: MatrixTransfrom矩阵变换,一句标准矩阵表示的变换 Tra ...

  8. js实现复制内容

    一.实现点击按钮,复制文本框中的的内容                         <script type="text/javascript"> function ...

  9. Android通过WebService实现图片的上传和下载(一)

    这篇文章将讲解Android如果通过访问WebService接口实现图片的上传和下载,当然这不但需要大家懂得Android还要懂得WebService技术,安卓属于客户端,而webservice则属于 ...

  10. STL - priority_queue(优先队列)

    优先级队列priority_queue 最大值优先级队列.最小值优先级队列 优先级队列适配器 STL priority_queue 用来开发一些特殊的应用. priority_queue<int ...