流的介绍
流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样,如下图:
Java流的分类
按流向分:
输入流: 程序可以从中读取数据的流。
输出流: 程序能向其中写入数据的流。
按数据传输单位分:
字节流: 以字节为单位传输数据的流
字符流: 以字符为单位传输数据的流
按功能分:
节点流: 用于直接操作目标设备的流
过滤流: 是对一个已存在的流的链接和封装,通过对数据进行处理为程序提供功能强大、灵活的读写功能。
常用的Java流
JDK所提供的所有流类位于java.io包中,分别继承自以下四种抽象流类,Java中其他多种多样变化的流均是由它们派生出来的:
InputStream:
继承自InputStream的流都是用于向程序中输入数据的,且数据单位都是字节(8位)。
OutputSteam:
继承自OutputStream的流都是程序用于向外输出数据的,且数据单位都是字节(8位)。
Reader:
继承自Reader的流都是用于向程序中输入数据的,且数据单位都是字符(16位)。
Writer:
继承自Writer的流都是程序用于向外输出数据的,且数据单位都是字符(16位)。
字符流
FileReader
用于读取字符文件的方便类。
FileReader是读取字符流。读取原始字节流,考虑使用FileInputStream。
常用构造方法
FileReader(File file) 参数是File对象
FileReader(String fileName) 参数是文件对象
方法摘要
public String getEncoding()
返回此流使用的字符编码的名称。
public void close()
关闭流并释放与它相关联的任何系统资源
public int read() throws IOException
读取单个字符。读出来的是ascii码,要把它赋值给Char才可以,而且每次读完下一次继续向下读
public int read(char[] cbuf,
int offset,
int length)
throws IOException
将字符读入一个数组的一部分
public boolean ready()
throws IOException
告诉是否该流已准备好阅读。
package io;
import java.io.*;
public class fileReader {
public static void main(String[] args) {
try {
// 两种获得文件句柄的方式
// File file=new File("/home/jensen/ProgramData/intellij/forJob/src/io/dataDir/myproperty.txt");
// FileReader fileReader=new FileReader(file);
FileReader fileReader = new FileReader("/home/jensen/ProgramData/intellij/forJob/src/io/dataDir/myproperty.txt");
// UTF-8
System.out.println(fileReader.getEncoding());
// 106
System.out.println(fileReader.read());
// d
System.out.println((char) fileReader.read());
fileReader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
FileWriter
常用构造方法
FileWriter(File file)
构建了一个文件对象FileWriter对象。
FileWriter(File file, boolean append)
构建了一个文件对象FileWriter对象。append为true则追加,false则把文件抹掉重写
FileWriter(String fileName)
构造给定文件名的FileWriter对象。
FileWriter(String fileName, boolean append)
构造FileWriter对象给出一个文件名与一个布尔值,指示是否附加写入的数据。
方法摘要
public void write(int c)
throws IOException
写一个字符。
public void write(String str,
int off,
int len)
throws IOException
写入字符串的一部分。
public void write(String str)
throws IOException
写入字符串。
public void flush()
throws IOException
冲流。每次写完都要加这个方法才起作用
package io;
import java.io.*;
public class fileWriter {
public static void main(String[] args) {
try {
// 两种获得文件句柄的方式
// File file=new File("/home/jensen/ProgramData/intellij/forJob/src/io/dataDir/myproperty.txt");
// FileWriter fileWriter=new FileWriter(file);
FileWriter fileWriter = new FileWriter("/home/jensen/ProgramData/intellij/forJob/src/io/dataDir/myproperty.txt",false);
fileWriter.write("将被追加到文本最后");
fileWriter.flush();
fileWriter.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
BufferedReader
从一个字符输入流中读取文本,缓冲字符,以便提供字符、数组和行的有效读取。
常用构造方法
BufferedReader(Reader in)
创建一个使用默认大小输入缓冲区的缓冲字符输入流。
BufferedReader(Reader in, int sz)
创建一个使用指定大小的输入缓冲区的缓冲字符输入流。
方法摘要
void close()
关闭流并释放与它相关联的任何系统资源。
Stream lines()
返回一个 Stream,其中的元素是线从这 BufferedReader读。
void mark(int readAheadLimit)
标记流中的当前位置。
int read()
读取单个字符。
int read(char[] cbuf, int off, int len)
将字符读入一个数组的一部分。
String readLine()
读一行文本。
boolean ready()
告诉是否该流已准备好阅读。
void reset()
将流到最近的标记。
long skip(long n)
跳过的字符。
package io;
import java.io.BufferedReader;
import java.io.FileReader;
public class bufferedReader {
public static void main(String[] args) {
try {
BufferedReader bufferedReader = new BufferedReader(new FileReader("E:\\workspace\\intellij\\forJob\\src\\io\\dataDir\\myproperty.txt"));
//读取一个字符
char c=(char)bufferedReader.read();
//逐行读取
String s=null;
while ((s=bufferedReader.readLine())!=null)
System.out.println(s);
}catch (Exception e){
e.printStackTrace();
}
}
}
InputStreamReader
InputStreamReader类是从字节流到字符流的桥接器:它使用指定的字符集读取字节并将它们解码为字符。
常用构造方法
InputStreamReader(InputStream in)
创建一个inputstreamreader使用默认字符集。
InputStreamReader(InputStream in, Charset cs)
创建一个inputstreamreader使用给定的字符集。
InputStreamReader(InputStream in, CharsetDecoder dec)
创建一个inputstreamreader使用给定的字符集解码。
InputStreamReader(InputStream in, String charsetName)
创建一个inputstreamreader使用指定的字符集。
方法摘要
void close()
关闭流并释放与它相关联的任何系统资源。
String getEncoding()
返回此流使用的字符编码的名称。
int read()
读取单个字符。
int read(char[] cbuf, int offset, int length)
将字符读入一个数组的一部分。
boolean ready()
告诉是否该流已准备好阅读。