java 必看IO流大全

目录

什么是流?

流的分类:

1.字节流:

FileInputStream:字节读取流(将内容读取到控制台)

FileOutputStream:字节写入流(将内容写入到文件) 

 2.缓冲流

 BufferedInputStream(提供8192字节的缓冲区,运行速度更快)

BufferedOutputStream

 3.数据流

DataInputStream

DataOutputStream

目录

什么是流?

流的分类:

1.字节流:

FileInputStream:字节读取流(将内容读取到控制台)

FileOutputStream:字节写入流(将内容写入到文件) 

 2.缓冲流

 BufferedInputStream(提供8192字节的缓冲区,运行速度更快)

BufferedOutputStream

 3.数据流

DataInputStream

DataOutputStream

【附】Object的序列化与反序列化 

4.对象流

ObjectInputStream

ObjectOutputStream

 5.打印输出流

PrintStream

【附】字符转换流(将字节流转换为字符流,图片...等其他形式) 

字符流 :

 1.文件流:

FileReader

FileWriter

2.缓冲流

BufferedReader

BufferedWriter

3.打印输出流

PrintWriter

 

【附】Object的序列化与反序列化 

4.对象流

ObjectInputStream

ObjectOutputStream

 5.打印输出流

PrintStream


字符流 :

 1.文件流:

FileReader

FileWriter

2.缓冲流

BufferedReader

BufferedWriter

3.打印输出流

PrintWriter

什么是流?

      流 是对文件内容读写的;

流的分类:

方向:

输入流(读):硬盘->内存

输出流(写):内存->硬盘

数据类型:

字节流

字符流

功能:

节点流:

处理流(过滤流、包装流):

1.字节流:

FileInputStream:字节读取流(将内容读取到控制台)

package day8_17;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

/**文件流:读*/
public class TestFileInputStream {
	public static void main(String[] args) throws IOException {
		//创建流对象
//		FileInputStream fin = new FileInputStream("d:/data/a.txt");
		File f = new File("d:/data/a.txt");
		FileInputStream fin = new FileInputStream(f);
		//2.读
		int temp;
		while((temp=fin.read())!=-1) {
			System.out.print((char)temp);
		}
		fin.close();				
	}
}

FileOutputStream:字节写入流(将内容写入到文件) 

package day8_17;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**输出*/
public class TestFileOutputStream {
	public static void main(String[] args) throws IOException {
		//把一个字符串存到b.txt文件中
		//false会覆盖(默认)的文件内容,true会追加
		FileOutputStream fout = new FileOutputStream("d:/data/b.txt",false);
		String s ="hello你好";
//		fout.write('h');
		byte [] b =s.getBytes();
		fout.write(b,2,2);
		fout.close();
	}
}

 2.缓冲流

 BufferedInputStream(提供8192字节的缓冲区,运行速度更快)

BufferedOutputStream

package day8_20;
/**缓冲流BufferedInputStream*/
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class TestPicture {
	public static void main(String[] args) throws IOException {
		FileInputStream fin = new FileInputStream("d:/data/duolaameng.jpg");
		//缓冲流提供了8192字节的缓冲区
		BufferedInputStream bfin = new BufferedInputStream(fin);
		FileOutputStream fout = new FileOutputStream("d:/data/newduolaanmeng.jpg");
		BufferedOutputStream bfout = new BufferedOutputStream(fout);
		int temp;
		while((temp=bfin.read())!=-1) {
			bfout.write(temp);
		}
		bfout.flush();//刷新缓冲区
		bfin.close();
		bfout.close();
	}
}

 3.数据流

DataInputStream

DataOutputStream

package day8_20;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class TestDataInputStream {
	public static void main(String[] args) throws IOException {
//		DataOutputStream dout = new DataOutputStream(new FileOutputStream("d:/data/s.txt"));
		File f = new File("d:/data/s.txt");
		FileOutputStream fout = new FileOutputStream(f);
		DataOutputStream dout = new DataOutputStream(fout);
		int [] no = {11,22,33};
		String [] name = {"aa","bb","cc"};
		for(int i=0;i<no.length;i++){
			dout.writeInt(no[i]);
			dout.writeUTF(name[i]);
		}
		dout.close();
		//
		FileInputStream fin = new FileInputStream(f);
		DataInputStream din = new DataInputStream(fin);
		for(int i=0;i<no.length;i++) {
			System.out.println(din.readInt());
			System.out.println(din.readUTF());
		}
		din.close();
	}
}

【附】Object的序列化与反序列化 

4.对象流

ObjectInputStream

ObjectOutputStream

package day8_20;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.Serializable;

//序列化,与反序列化
class Student implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String name;
	private int no;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getNo() {
		return no;
	}
	public void setNo(int no) {
		this.no = no;
	}
}
public class TestObjectOutputStream {
	public static void main(String[] args) throws IOException, ClassNotFoundException{
		Student guojing = new Student();
		guojing.setName("郭靖");
		guojing.setNo(22);
		/*//序列化,把对象以二进制流的形式存储起来
		ObjectOutputStream obj = new ObjectOutputStream(new FileOutputStream("d:/hzh/obj.txt"));
		//写
		obj.writeObject(guojing);
		//关
		obj.close();*/
		//反序列化
		ObjectInputStream objin = new ObjectInputStream(new FileInputStream("d:/hzh/obj.txt"));
		//读
		Student stu = (Student)objin.readObject();
		System.out.println(stu.getName()+","+stu.getNo());
		objin.close();
		
	}
}

 5.打印输出流

PrintStream

package day8_20;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintStream;

//把一个文件内容读出来,在控制台上显示出来
public class TestPrintStream {
	public static void main(String[] args) throws IOException {
		//读
		FileInputStream fin = new FileInputStream("d:/data/b.txt");
		byte [] b = new byte[fin.available()];
		fin.read(b);
		//
		PrintStream ps = new PrintStream(System.out);
		ps.println(new String (b,"gbk"));
		ps.close();
	}
}

【附】字符转换流(将字节流转换为字符流,图片...等其他形式) 

package day8_17;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

/**文件流:中文处理*/
public class TestFileInputStream2 {
	public static void main(String[] args) throws IOException {
//		FileInputStream fin = new FileInputStream("d:/data/a.txt");
		File f = new File("d:/data/a.txt");
		FileInputStream fin = new FileInputStream(f);
		//转换字符流
//		InputStreamReader ir = new InputStreamReader(fin,"gbk");
		
		//2.读
		/*int temp;
		while((temp=ir.read())!=-1) {
			System.out.print((char)temp);
		}*/
		byte [] b = new byte[fin.available()];
		//把读到的字节数组大小的数据存到字节数组b中,返回读到的字节数
		//(字节数组,字节数组的起始位置,存几个)
		fin.read(b,1,2);
		String s = new String(b,"gbk");
		System.out.println(s);
		fin.close();
	}
}

字符流 :

 1.文件流:

FileReader

package day8_20;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class TestFileReader {
	public static void main(String[] args) throws IOException {
		//读
		FileReader fr = new FileReader("d:/data/a.txt");
		//读
		int temp;
		while((temp=fr.read())!=-1) {
			System.out.print((char)temp);
		}
		fr.close();
		
		
	}
}

FileWriter


2.缓冲流

  • BufferedReader

  • BufferedWriter

package day8_20;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Demo6 {
	public static void main(String[] args) throws IOException {
		File f = new File("d:/data/Student.java");
		FileReader fr =new FileReader(f);
		FileWriter fw= new FileWriter("d:/data/Student.txt");
		BufferedReader br= new BufferedReader(fr);
		BufferedWriter bw = new BufferedWriter(fw);
		StringBuffer sb = new StringBuffer("hello");
		int temp;
		while((temp=br.read())!=-1) {
			sb.append((char)temp);
		}
		String s = sb.toString();
		bw.write(s);
		br.close();
		bw.close();
		
	}
}

3.打印输出流

PrintWriter

package day8_20;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;

public class TestPrintWriterStu {
	public static void main(String[] args) throws IOException {
		PrintWriter pw = new PrintWriter("d:/data/name.txt");
		Scanner input = new Scanner(System.in);
		String name ;
		System.out.println("请输入姓名:");
		do {
			name = input.nextLine();
			pw.println(name);
		}while(!name.equals("q"));
		pw.close();
	}
}

猜你喜欢

转载自blog.csdn.net/qq_42676052/article/details/81877892