文章目录
- Java IO流
- 什么是IO流
- IO流的分类
- java 中所有流汇总
- 常见IO流
- 1.访问操作文件(FileInputStream/FileReader ,FileOutputStream/FileWriter)
- 2.缓存流的使用(BufferedInputStream/BufferedOutputStream,BufferedReader/BufferedWriter)
- 3.转换流的使用(InputStreamReader/OutputStreamWriter)
- 4.对象流的使用(FileInputStream/ObjectOutputStream)
- 5、字节数组流的使用(ByteArrayInputStream/ByteArrayOutputStream)【通常结合数据流DataInputStream/DataOutputStream】
Java IO流
什么是IO流
通过IO可以完成硬盘文件的读和写。
- I : Input
- O : Output
IO流的分类
1. 按照流的方向
· 输入流(InputStream、Reader)
· 输出流(OutputStream、Writer)
2. 按照流的操作粒度
· 字符流 以字符为单元,只能操作纯字符数据(Reader、Writer)
· 字节流 以字节为单元,可操作任何数据(InputStream、OutPutStream)
java 中所有流汇总
常见IO流
1.访问操作文件(FileInputStream/FileReader ,FileOutputStream/FileWriter)
1)使用 FileInputStream 从文件读取数据
import java.io.*;
public class TestFileImportStream {
public static void main(String[] args) {
int b=0;
FileInputStream in = null;
try {
in =new FileInputStream("D:\\TestFileImportStream.java");
}catch(FileNotFoundException e){
System.out.println("file is not found");
System.exit(-1);
}
try {
long num=0;
while ((b=in.read())!=-1) {
System.out.println((char)b);
num++;
}
in.close();
System.out.println();
System.out.println("共读取了"+num+"个字节");
}catch(IOException e) {
System.out.println("IO异常,读取失败");
System.exit(-1);
}
}
- 使用 FileOutputStream 往文件写数据
import java.io.*;
public class TextFileOutputStream {
public static void main(String[] args) {
int b=0;
FileInputStream in = null;
FileOutputStream out = null;
try {
in =new FileInputStream("D:\\TestFileImportStream.java");
out=new FileOutputStream("D:\\out.java");
}catch(FileNotFoundException e){
System.out.println("file is not found");
System.exit(-1);
}
try {
while ((b=in.read())!=-1) {
out.write(b);
}
in.close();
out.close();
}catch(IOException e) {
System.out.println("IO异常,读取失败");
System.exit(-1);
}
System.out.println("文件复制完成");
}
}
2.缓存流的使用(BufferedInputStream/BufferedOutputStream,BufferedReader/BufferedWriter)
import java.io.*;
public class TestBufferStream {
public static void main (String[] args) throws IOException{
BufferedInputStream bis=null;
BufferedOutputStream bos=null;
try {
FileInputStream fis = new FileInputStream("D:\\TestFileImportStream.java");
FileOutputStream fos = new FileOutputStream("D:\\out2.java");
bis = new BufferedInputStream(fis);
bos = new BufferedOutputStream(fos);
byte[] b = new byte[1024];
int off=0;
while ((off=bis.read(b))>0) {
bos.write(b,0,off);
}
bis.close();
bos.close();
}catch (IOException e) {
e.printStackTrace();
}finally {
bis.close();
bos.close();
}
}
}
3.转换流的使用(InputStreamReader/OutputStreamWriter)
import java.io.*;
public class TransStreamTest {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\test.txt"));
String line =null;
while ((line=br.readLine())!=null) {
if ("over".contentEquals(line)) {
break;
}
bw.write(line);
bw.newLine();
bw.flush();
}
bw.close();
br.close();
}
}
4.对象流的使用(FileInputStream/ObjectOutputStream)
下面程序使用一个对象流,把对象直接写到文件中
import java.io.*;
public class ObjectStreamTest {
public static void main(String[] args) throws Exception{
try {
Person P=new Person("Jeccica",26);
FileOutputStream fos=new FileOutputStream("D:\\test.txt");
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(P);
oos.flush();
oos.close();
}catch(FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}
FileInputStream fis=new FileInputStream("D:\\test.txt");
ObjectInputStream ois=new ObjectInputStream(fis);
Person P2=(Person)ois.readObject();
System.out.println(P2.name+"的年龄为"+P2.age);
}
}
class Person implements Serializable{
String name=null;
int age=0;
Person(String _name,int _age){
name=_name;
age=_age;
}
}
5、字节数组流的使用(ByteArrayInputStream/ByteArrayOutputStream)【通常结合数据流DataInputStream/DataOutputStream】
import java.io.*;
public class DataStream {
public static void main(String[] args) {
ByteArrayOutputStream baos=new ByteArrayOutputStream();//创建字节数组流,同时会在内存里面创建数组
DataOutputStream dos=new DataOutputStream(baos);//对字节数组流外封装成数据处理流
try {
dos.writeDouble(Math.random());//利用数据流里面的写入方法,写一个Double类型的随机数据
dos.writeBoolean(true);
ByteArrayInputStream bias=new ByteArrayInputStream(baos.toByteArray());//toByteArray()方法是创建一个新分配的字节数组。数组的大小和当前输出流的大小。这里指的是baos这个字节数组
System.out.println(bias.available());
DataInputStream dis=new DataInputStream(bias);
System.out.println(dis.readDouble());
System.out.println(dis.readBoolean());
dos.close();
dis.close();
}catch (IOException e) {
e.printStackTrace();
}
}
}
字节数组流,即存放在内存中,因此有称之为内存流;其中字节数组流也一种节点流;除了节点流外,我们也将学习另外一种处理流,即数据流。数据处理流是用于针对数据类型传输处理的,是一种处理流,即是在节点流之上的增强处理,一般用于序列化和反序列化的时候用到。