java学习笔记之IO编程—打印流和BufferedReader
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的更多相关文章
- java学习笔记之IO编程—内存流、管道流、随机流
1.内存操作流 之前学习的IO操作输入和输出都是从文件中来的,当然,也可以将输入和输出的位置设置在内存上,这就需要用到内存操作流,java提供两类内存操作流 字节内存操作流:ByteArrayOutp ...
- java学习笔记之IO编程—字节流和字符流
1. 流的基本概念 在java.io包里面File类是唯一一个与文件本身有关的程序处理类,但是File只能够操作文件本身而不能操作文件的内容,或者说在实际的开发之中IO操作的核心意义在于:输入与输出操 ...
- java学习笔记之IO编程—对象序列化
对象序列化就是将内存中保存的对象以二进制数据流的形式进行处理,可以实现对象的保存或网络传输. 并不是所有的对象都可以被序列化,如果要序列化的对象,那么对象所在的类一定要实现java.io.Serial ...
- java学习笔记之IO编程—目录和文件的拷贝
进行文件或目录的拷贝时,要先判断处理对象是文件还是目录,如果是文件则直接拷贝,如果是目录还需要拷贝它的子目录及其文件,这就需要递归处理了 import java.io.*; class FileUti ...
- java学习笔记之IO编程—File文件操作类
1. File类说明 在Java语言里面提供有对于文件操作系统操作的支持,而这个支持就在java.io.File类中进行了定义,也就是说在整个java.io包里面,File类是唯一一个与文件本身操作( ...
- java学习笔记15--多线程编程基础2
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note15.html,转载请注明源地址. 线程的生命周期 1.线程的生命周期 线程从产生到消亡 ...
- java学习笔记14--多线程编程基础1
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note14.html,转载请注明源地址. 多线程编程基础 多进程 一个独立程序的每一次运行称为 ...
- Java IO学习笔记(四)打印流
1.只有输出流才有打印流:PrintWriter和PrintStream分别针对字符和字节,提供了重载的print,Println方法用于多种数据类型的输出.PrintWriter和PrintStre ...
- Java学习笔记-10.io流
1.输入流,只能从中读取数据,而不能向其写出数据.输出流,只能想起写入字节数据,而不能从中读取. 2.InputStream的类型有: ByteArrayInputStream 包含一个内存缓冲区,字 ...
随机推荐
- if-else连用时的陷阱
近日,在实现<The C Programing Language>上的一个练习题时,写出了下面一段代码 ; i<=right; i++) { ) ) swap(v, i, ++la ...
- JMeter-命令行模式压测
前言 使用非GUI模式,即命令行模式运行jmeter测试脚本能够大大缩减系统资源,今天跟小伙伴们讲一下JMeter如何在命令行模式进行压测吧! 一:配置好JDK和JMeter的环境变量(过程略) 二: ...
- Shiro -- (三) 自定义Realm
简介: Realm:域,Shiro 从从 Realm 获取安全数据(如用户.角色.权限),就是说 SecurityManager 要验证用户身份,那么它需要从 Realm 获取相应的用户进行比较以确定 ...
- SAP 序列号与库存关联起来?
SAP 序列号与库存关联起来? SAP系统标准功能可以实现序列号管理.其系统配置也不复杂,但是不少企业却使用不起来.笔者参与的诸多项目里,只有现在所在的项目里有启用序列号管理.基于项目客户所在行业,以 ...
- 「Flink」RocksDB介绍以及Flink对RocksDB的支持
RocksDB介绍 RocksDB简介 RocksDB是基于C++语言编写的嵌入式KV存储引擎,它不是一个分布式的DB,而是一个高效.高性能.单点的数据库引擎.它是由Facebook基于Google开 ...
- 常见的MIME类型与00截断
常见的MIME类型 1)超文本标记语言.html文件的MIME类型为:text/html 2)普通文本.txt文件的MIME类型为:text/plain 3)PDF文档.pdf的MIME类型为:app ...
- 转载整理:SublimeText3 Emmet失效问题以及win7 pyV8安装问题
SublimeText3 Emmet安装问题网上已经很多帖子了,这个简单,主要对win7 64位我本人遇到的Emmet好多快捷功能无法用(比如ul>li*4 Tab无法生成)问题做了整理!搜了 ...
- iMacros 入门教程-基础函数介绍(3)
imacros 的 PAUSE 函数用法 这个函数的作用是暂停程序的运行,也就是断点. 对于有时运行到某一步需要输入内容时,或者需要调试时非常有用 如果你混着 pause 和 wait 一起用,那么当 ...
- Oracle12c传统数据库模式 OGG
OGG12C 配置 环境配置: 安装数据库Oracle12c 安装源端OGG:oggs PORT:7809 安装目标端OGG:oggt PORT:7909 源端和目标端地址:127.0.0.1 ...
- 剑指offer-面试题46-把数字翻译成字符串-动态规划
/* 题目: 给定一个数字,将0~25依次翻译为a~z,计算有多少种翻译方法. */ /* 思路: 动态规划法 */ #include<iostream> #include<cstr ...