IO流-字符流
来源:互联网 发布:宿州影楼美工招聘兼职 编辑:程序博客网 时间:2024/05/03 18:42
IO流
“java语言以流的形式进行数据的输入输出。”
数据流是一种形象的概念,可以理解为是一种数据传输的“管道”。将字节数据的读写,抽象成数据在管道中流动。管道中流动的数据可以是基于字节的,也可以是基于字符的。当程序需要读写数据的时候,就会开启一个通向数据源的管道,进行数据的输入输出。
这里需要注意的是:(刚学习的时候经常摸不清怎么回事儿,现在也有点后遗症....)
IO的流向问题:
输入:程序要从数据源获得数据时。(数据从磁盘或网络等流入程序(内存))
输出:程序有数据结果需要输出。(数据从(程序)内存流到磁盘或网络等)
输入输出的参照物都是java程序。是相对于java程序而言的。
java中的流分为两种:字节流/字符流。(以Stream结尾的是字节流,反之是字符流)
分别由四个抽象类表示:
字节流:
输入:InputStream
输出:OutputStream
字符流:
输入:Reader
输出:Writer
(只要是处理纯文本数据,优先考虑字符流,除此外都用字节流。)
字符流:以16位Unicode码表示字符位基本处理单位
以字符的形式对数据进行读写
Reader/Writer:基类
它的子类有:
OutputStreamWriter/ InputStreamReader
BufferedReader /BufferedWriter
Reader:
方法:
ready()
判断是否准备读取输入流
int read()
读取一个字符,返回读取的字符。如果读取完毕到达末尾,返回-1。
int read(char[ ] b)
从输入流中读取一定数量的字符并将其存储在缓冲区数组b中。返回读入缓冲区的总字节数。
int read(char[ ]b,int off,int len)
读取len个字符,从数组b的下标off处开始存放,返回实际读取的字符数
void reset()
将当前流重新定位到mark()方法标记的位置
void mark()
给当前流作标记,最多支持readAheadLimit个字符的回溯
boolean markSupported()
判断当前流是否支持做标记
void close()
关闭当前流对象 ,并释放与数据流相关的资源
Writer:
方法:
void write(int b)
将整型值c的低16位写入输出流
void write(String str)
将指定的字符串写入输出流
void write(String str,int off,int len)
将指定的字符串从off位置开始的len个字符写入输出流
void write(char[ ] c)
将字符数组c写入输出流
void write(char[ ] c, int off, int len)
将字符数组b中从索引off的位置开始的len个字符写入输出流
void flush()
清空流并强制将缓冲区中所有数据写入到流中
void close()
关闭当前流对象 ,并释放与数据流相关的资源
eg:Writer w = new OutputStreamWriter(new FileOutputStream(file/路径));Reader r = new InputStreamReader(FileInputStream(file/路径));FileReader/FileWriter 文件读/写字符流
FileReader:(InputStreamReader的子类)
用于读取文本文件的流对象
FileReader类创建了一个可以读取文件内容的Reader类。必须指定一个被读取的文件。
Reader reader = new FileReader(String filePath);Reader reader = new FileReader(FIle file);FileWriter:(OutputStreamWriter的子类)
用于处理文本文件。
类中有默认编码表。
有临时缓冲。
FileWriter创建了一个可以写文件的Writer类
//在指定的位置创建一个文件,如果文件已存在,将会覆盖Writer writer = new FileWriter(String filePath);//append为true,如果文件已存在,会在指定的文件末尾处进行数据续写。Writer writer = new FileWriter(String filePath,boolean append);//如果文件已存在,将会覆盖Writer writer = new FileWriter(File file);FileWriter类的创建不依赖与文件存在与否。
字符缓冲区输入流--BufferedReader:从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取
BufferedReader reader = new BufferedReader(Reader in);//指定输入缓冲区大小BufferedReader reader = new BufferedReader(Reader in,int size);方法:
readLine() 读取一行数据,不包含末尾换行符;读取结束后,再读取,返回 null
字符缓冲区输出流--BufferedWriter:
BufferedWriter reader = new BufferedWriter(Writer out);//指定输出缓冲区大小BufferedWriter reader = new BufferedWriter(Writer out,int size);方法:
newLine() 写入一个行分隔符
eg:BufferedReader reader = new BufferedReader(new InputStreamReader( new FileInputStream(file/路径), "UTF-8")); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter( new FileOutputStream(file/路径), "UTF-8"));
import java.io.*;public class BufferedRWDemo{ public static void main(String[]args){ try{ BufferedReader bufReader=new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bufWriter=new BufferedWriter(new FileWriter("BufferedRWDemo.txt")); String input=null; While(!(input=bufReader.readLine()).equals("quit")){ bufWriter.write(input); bufWriter.newLine(); } bufReader.close(); bufWriter.close(); } catch(Exception e){ e.printStackTrace(); } }}
字符打印流--PrintWriter 将字符数据进行格式化输出
PrintWriter out = new PrintWriter(Writer out);
PrintWriter out = new PrintWriter(File file);
PrintWriter out = new PrintWriter(File file, 字符集);
方法:
print(boolean b) 输出boolean类型的数据
print(char c) 输出char类型数据
......char[]、double、float、int、long、String等
InputStreamReader 和 OutputStreamWriter--字节流和字符流之间转换
这两个类是字节流和字符流之间转换的类:
InputStreamReader 可以将一个字节流中的字节解码成字符。通过InputStream类型对象构建实例
OuputStreamWriter 将写入的字符编码成字节后写入一个字节流。通过OutputStream类型对象构建实例
InputStreamReader:
// 用默认字符集创建一个 InputStreamReader对象InputStreamReader reader = new InputStreamReader(InputStream in);// 接受已指定字符集名的字符串,并用该字符集创建对象InputStreamReader reader = new InputStreamReader(InputStream in,String CharsetName);//另外指定编码类型OutputStreamWriter:
OutputStreamWriter writer = new OutputStreamWriter(OutputStream out);OutputStreamWriterwriter = new OutputStreamWriter(OutputStream out,String CharsetNarme);//另外指定编码类型
readLine():此方法本质还是缓冲区关联流对象的read()方法。只不过,每次读到一个字符,先不进行具体操作,先进行临时存储。当读到换行符(回车标记)时,将临时容器中的数据一次性返回。
java定义的两个流对象System.in与System.out:
可以在程序中直接使用,而不用重新定义自己的流对象。
System.in:可以从键盘中读入数据。
System.out:可以将数据输出到显示屏。
- 字符IO&数据流IO&对象流IO
- IO流-字符流
- IO流-字符流
- IO流--字符流
- java IO(字符流)
- IO之字符流
- IO(3) 字符流
- IO字符流
- IO字符流
- IO之字符流
- IO二:字符流
- IO之字符流
- IO 字符流学习
- IO字符流
- IO字符流总结
- Java Io 字符流
- IO-字符流
- Java 字符流 IO
- aa
- ubuntu python install oracle module cx_Oracle
- 个人笔记(第四篇)
- You may need to configure your browser or application to trust the Charles Root Certificate.
- WPF中的TreeView入门
- IO流-字符流
- mysql 之序列表,自增id作用
- 常用的android studio 的快捷键设置和代码块缩写
- 在ubuntu16.xx PHP测试连接MySQL中出现Call to undefined function: mysql_connect()
- 为龙芯1c交叉编译qt要点
- HDU 1051 Wooden Sticks
- Quartzs实现任务调度 及对cron时间的编写调试
- nginx+php负载均衡集群中session共享
- spring四种依赖注入方式