目录
FileInputStream:字节读取流(将内容读取到控制台)
FileOutputStream:字节写入流(将内容写入到文件)
BufferedInputStream(提供8192字节的缓冲区,运行速度更快)
目录
FileInputStream:字节读取流(将内容读取到控制台)
FileOutputStream:字节写入流(将内容写入到文件)
BufferedInputStream(提供8192字节的缓冲区,运行速度更快)
【附】字符转换流(将字节流转换为字符流,图片...等其他形式)
什么是流?
流 是对文件内容读写的;
流的分类:
方向:
输入流(读):硬盘->内存
输出流(写):内存->硬盘
数据类型:
字节流
字符流
功能:
节点流:
处理流(过滤流、包装流):
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();
}
}