1.打印流(PrintWriter)

想要通过程序实现内容输出,其核心一定是要依靠OutputStream类,但是OutputStream类有一个最大缺点,就是这个类中的输出操作功能有限,所有的数据一定要转换为字节数组后才可以输出,当我们想要输出的数据可能是long,double,Date时就变得很麻烦,在不用java提供的PrintWriter类的情况下,我们可以自己定义功能来解决此类问题,代码如下:

import java.io.*;

public class PrintStreamDemo {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
File file = new File("D:"+File.separator+"www.txt");
PrintUtil pu = new PrintUtil(new FileOutputStream(file));
pu.println("姓名:张伟");
pu.print("年龄:");
pu.println(32);
pu.close();
}
}
class PrintUtil implements AutoCloseable{//实现一些常用数据的输出
private OutputStream output;//不管你现在如何进行输出操作,核心使用的就是OutputStream public PrintUtil(OutputStream output) {//由外部来决定输出的位置
super();
this.output = output;
}
public void print(long num) {
this.print(String.valueOf(num));
}
public void println(long num) {
this.println(String.valueOf(num));
}
public void print(String str) {//输出字符串
try {
this.output.write(str.getBytes());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void println(String str) {
this.print(str+"\r\n");
}
@Override
public void close() throws Exception {
// TODO Auto-generated method stub
this.output.close();
} }

OutputStream是唯一可以实现输出的操作标准类,所以在整个操作中已其为核心根本,但是这个类输出的操作功能有限,所以不方便进行输出各个数据的类型,所以就为它做出一层包装类,采用的思想是“装饰设计模式”,整个操作的本质就是通过外层包装类将各种数据(long,double,Date等)转换成字符串,再通过OutputStream类进行输出。

当然,以上的操作不需要我们自己定义,在java.io包里面就提供有打印流:PrintStream(主要操作字节流)   PrintWriter(主要操作字符流)

PrintStream类的定义:

public class PrintStream extends FilterOutputStream implements Appendable, Closeable

构造方法:

public PrintStream​(OutputStream out) 

PrintWriter类的定义:

public class PrintWriter extends Writer

构造方法:

public PrintWriter​(OutputStream out)
public PrintWriter​(Writer out)

代码实例:

package IODemo;

import java.io.*;

public class PrintWriterDemo {

    public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
File file = new File("D:"+File.separator+"www.txt");
PrintWriter pw = new PrintWriter(new FileOutputStream(file));
String name = "小布";
int age = 33;
double salary = 15000;
pw.printf("name:%s age:%d salary:%.2f", name,age,salary);
pw.close();
} }

比起直接使用OutputStream类,那么使用PrintWriter PrintStream类的处理操作会更加简单。只要是进行内容输出的时候全部用打印流。

2.BufferedReader类

提供的是一个缓冲字符输入流的概念,也就是说利用BufferedRead类可以很好的解决输入流数据的读取问题,当BufferedReader在读取文本文件时,会先尽量从文件中读入字符数据并置入缓冲区,而之后若使用read()方法,会先从缓冲区中进行读取。如果缓冲区数据不足,才会再从文件中读取,这个类在最初的时候提供的最完善的数据输入的处理。

从标准输入流System.in中直接读取使用者输入时,使用者每输入一个字符,System.in就读取一个字符。为了能一次读取一行使用者的输入,使用了BufferedReader来对使用者输入的字符进行缓冲。readLine()方法会在读取到使用者的换行字符时,再一次将整行字符串传入。

System.in是一个字节输入流,为了转换为字符输入流,可使用InputStreamReader将其转换为字符流,然后再使用BufferedReader为其增加缓冲功能。例如:

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

BufferedReader类的定义:

public class BufferedReader extends Reader

构造方法:

public BufferedReader​(Reader in)

代码实例:

import java.io.*;

public class BufferedReaderDemo {

    public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
System.out.print("请输您的年龄:");
String msg = input.readLine();//接收输入信息
if(msg.matches("\\d+")) {
int age = Integer.parseInt(msg);
System.out.println("年龄为:"+msg);
}else {
System.out.println("不对");
}
} }

当程序中需要用到输入数据的情况时,所有数据的类型都是通过String进行描述,这样就方便接送者进行各种处理,BufferedReader可以被Scanner替代

注意:输出数据一定用打印流,输入数据用Scanner或BufferedReader

java学习笔记之IO编程—打印流和BufferedReader的更多相关文章

  1. java学习笔记之IO编程—内存流、管道流、随机流

    1.内存操作流 之前学习的IO操作输入和输出都是从文件中来的,当然,也可以将输入和输出的位置设置在内存上,这就需要用到内存操作流,java提供两类内存操作流 字节内存操作流:ByteArrayOutp ...

  2. java学习笔记之IO编程—字节流和字符流

    1. 流的基本概念 在java.io包里面File类是唯一一个与文件本身有关的程序处理类,但是File只能够操作文件本身而不能操作文件的内容,或者说在实际的开发之中IO操作的核心意义在于:输入与输出操 ...

  3. java学习笔记之IO编程—对象序列化

    对象序列化就是将内存中保存的对象以二进制数据流的形式进行处理,可以实现对象的保存或网络传输. 并不是所有的对象都可以被序列化,如果要序列化的对象,那么对象所在的类一定要实现java.io.Serial ...

  4. java学习笔记之IO编程—目录和文件的拷贝

    进行文件或目录的拷贝时,要先判断处理对象是文件还是目录,如果是文件则直接拷贝,如果是目录还需要拷贝它的子目录及其文件,这就需要递归处理了 import java.io.*; class FileUti ...

  5. java学习笔记之IO编程—File文件操作类

    1. File类说明 在Java语言里面提供有对于文件操作系统操作的支持,而这个支持就在java.io.File类中进行了定义,也就是说在整个java.io包里面,File类是唯一一个与文件本身操作( ...

  6. java学习笔记15--多线程编程基础2

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note15.html,转载请注明源地址. 线程的生命周期 1.线程的生命周期 线程从产生到消亡 ...

  7. java学习笔记14--多线程编程基础1

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note14.html,转载请注明源地址. 多线程编程基础 多进程 一个独立程序的每一次运行称为 ...

  8. Java IO学习笔记(四)打印流

    1.只有输出流才有打印流:PrintWriter和PrintStream分别针对字符和字节,提供了重载的print,Println方法用于多种数据类型的输出.PrintWriter和PrintStre ...

  9. Java学习笔记-10.io流

    1.输入流,只能从中读取数据,而不能向其写出数据.输出流,只能想起写入字节数据,而不能从中读取. 2.InputStream的类型有: ByteArrayInputStream 包含一个内存缓冲区,字 ...

随机推荐

  1. centos7.5下一键安装nginx-1.8.1

    #!/usr/bin/bash #安装依赖软件 yum install -y make cmake gcc gcc-c++ autoconf automake libpng-devel libjpeg ...

  2. [Linux]命令返回值以及错误对照表

    Linux执行完命令之后默认会有一个返回值 # ls app backupconfig.json Doc manage.py __pycache__ settings.py # echo $? 0 错 ...

  3. 【HDU - 1069】 Monkey and Banana (基础dp)

    Monkey and Banana 直接写中文了 Problem Statement 一组研究人员正在设计一项实验,以测试猴子的智商.他们将挂香蕉在建筑物的屋顶,同时,提供一些砖块给这些猴子.如果猴子 ...

  4. tomcat+memcached+nginx部署文档(附完整部署包直接运行即可)

    1 前言 1.1 目的 为了正确的部署“ngix+memcached”特编写此部署手册,使安装人员可以通过部署手册知道如何部署系统,也为需要安装该系统的安装人员正确.快速的部署本系统提供帮助. 1.2 ...

  5. Java的引用类型的内存分析

    一. jdk的内存:jdk的bin目录常见命令 1. javac.exe:编译java源代码的,生成java字节码文件(*.class) 2. java.exe:启动一个jvm,来运行指定class字 ...

  6. 聊聊spring之bean对象的实例化过程

    在spring实例化 之前bean对象封装成 beanDefinition 对象 想了解详情的请参考上一篇文章 好了 我们聊聊 Bean 的实例化过程的几个重要角色 BeanDefinitionReg ...

  7. git基础教程(三)

    3.github与git同步 3.1 配置公私钥 3.2 github上建立个人仓库 3.3 本地仓库同步到github #将本地仓库与远端仓库建立连接 #用简写名代替后面的远端连接 git remo ...

  8. Tomcat 项目部署、账户配置、状态监测

    tomcat部署项目 方式一.自动部署(最常用) 直接把war包或部署的文件夹放到webapps下. tomcat启动后会自动监听webapps下的文件|目录,放入打包好的项目会自动部署,移除打包好的 ...

  9. Bash脚本编程学习笔记07:循环结构体

    本篇中涉及到算术运算,使用了$[]这种我未在官方手册中见到的用法,但是确实可用的,在此前的博文<Bash脚本编程学习笔记03:算术运算>中我有说明不要使用,不过自己忘记了.大家还是尽量使用 ...

  10. postman设置变量

    参数化 变量引用格式:{{username}}   , 区别jmeter的  {username} 一.设置与引用环境变量 背景:在不同的环境下跑相同的测试,生产环境或测试环境 二.设置与引用全局变量 ...