什么是IO
I:Input 读
O:Output 写
通过IO可以完成硬盘文件的读写
IO流的分类
- 按照流的方向进行分类:
输入流:
往内存中去,叫输入(Input)(读)
输出流:
从内存中出来,叫输出(Output)(写) - 按照读取数据方式不同进行分类:
字节流:(这种流是万能的,什么类型的文件都能读取)
有的流是按照字节的方式读取数据,一次读取1个字节byte,等同于一次读取8个二进制
字符流:(只能读取纯文本文件)
有的流是按照字符的方式读取数据的,一次读取一个字符
Java中的IO流
java中的所有流都在:java.io.*下
IO流四大家族:
java.io.InputStream 字节输入流
java.io.OutputStream 字节输出流
java.io.Reader 字符输入流
java.io.Writer 字符输出流
(Stream结尾的都是字节流;Reader/Writer结尾的是字符流)
(Tip:字节流用byte[];字符流用char[])
所有的流都实现了java.io.Closeable接口,都可关闭,都有close()方法(记住常写)
所有的输出流都实现了java.io.Flushable接口,都是可刷新的,都有flush()方法(记住常写)
这个flush()表示将管道当中剩余未输出的数据强行输出完(清空管道)
java中需要掌握的流:16个
文件专属:
java.io.FileInputStream
java.io.FileOutputStream
java.io.FileReader
java.io.FileWriter
转换流:(将字节流转换成字节流)
java.io.InputStreamReader
java.io.OutputStreamWriter
缓冲流专属:
java.io.BufferedInputStream
java.io.BufferedOutputStream
java.io.BufferedReader
java.io.BufferedWriter
数据流专属:
java.io.DataInputStream
java.io.DataOutputStream
标准输出流:
java.io.PrintWriter
java.io.PrintStream
对象专属流:
java.ObjectInputStream
java.ObjectOutputStream
字节流
java.io.FileInputStream(字节输入流)
数组用byte[]
/*
java.io.FileInputStream
1.文件字节输入流,万能的,任何类型的为那就都可采用这个流来读
2.字节的方式,完成输入的操作
*/
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputSteamTest01 {
public static void main(String[] args) throws IOException {
//创建文件字节输入流对象
FileInputStream fis=null;
try {
fis=new FileInputStream("F:\\XXXX\\XXX.png");
byte[] bytes=new byte[10];
int readCount=0;
while ((readCount=fis.read(bytes))!=-1){
//读
System.out.println(new String(bytes,0,readCount));//返回成字符串
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
//关闭流
if(fis!=null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
java.io.FileOutputStream(字节输出流)
数组用byte[]
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/*
java.io.FileOutputStream
写文件
*/
public class FileOutputStreamTest01 {
public static void main(String[] args) {
FileOutputStream fos=null;
try {
//“true”以追加的方式在文件后面写入,不会清空原文件
fos = new FileOutputStream("文件",true);//这里默认路径为IDEA中Project的根
byte[] bytes={
1,3,5,48,29,78,98,97,100};
//写入
fos.write(bytes);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(fos!=null){
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
文件Copy
使用字节流copy
数组用byte[]
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
//文件copy
public class Copy01 {
public static void main<