IO流的常用流
输入流 : 输入字节流和输入字符流 将硬盘的文件输出到Java内存
输出流 : 输出字节流和输出字符流 从内存写到磁盘中
缓冲 : 缓冲的字面意思是减缓冲击力比如 看视频比较卡 暂停缓存一会
1.字节输入流
FileInputStream
package com.kz.a_Io;
import java.io.*;
public class Demo01 {
public static void main(String[] args) throws IOException {
File file=new File("d:/aa/2.txt");
//创建输入字节流
FileInputStream fls=new FileInputStream(file);
//创建缓冲输入字节流
BufferedInputStream bis=new BufferedInputStream(fls);
// 最快
byte [] bytes=new byte[4 * 1024];
int length;
while ((length=bis.read(bytes))!=-1){
//展示到控制台 byte数组会一次一次的覆盖 所有要从0到length
System.out.println(new String(bytes,0,length));
}
//关流
fls.close();
bis.close();
}
}
注意事项 :
1.设置的byte数组的容量,如果第二次的内容不够覆盖上一次的内容,那么没有被覆盖的就还会被输出
2.输出的时候要从第0个,到第length个。
3.read()方法如果达到流的末尾,返回-1.
4.关流(自下而上关闭流)
2.字节输出流
FileOutputStream
package com.kz.a_Io;
import java.io.*;
public class Demo02 {
public static void main(String[] args) throws IOException {
File file=new File("d:/aa/2.txt");
//输出字节流
FileOutputStream fos=new FileOutputStream(file);
//创建缓存字节流
BufferedOutputStream bos=new BufferedOutputStream(fos);
//字符串
String str="你一定能够成为你想要去成为的人";
//将字符串转换为byte数组
byte[] bytes = str.getBytes();
//写入
bos.write(bytes);
//关闭
bos.close();
fos.close();
}
}
注意事项:
输入 read()
输出 write()
练习: 将d:/aa/bb/1.txt 复制到d:/aa/2.txt
package com.kz.a_Io;
import java.io.*;
public class Demo03 {
public static void main(String[] args) throws IOException {
/**
* 将d:/aa/bb/1.txt 复制到d:/aa/2.txt
*/
//记录开始时间
long start = System.currentTimeMillis();
//创建缓存输入字节流
BufferedInputStream put = new BufferedInputStream(new FileInputStream(new File("d:/aa/bb/1.txt")));
//创建缓存输出字节流
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("d:/aa/2.txt"));
//创建字节数组
byte[]bytes=new byte[4*1024];
int length;
while ((length=put.read(bytes))!=-1){
//复制操作
out.write(bytes,0,length);
System.out.println(new String(bytes,0,length));
}
//记录结束时间
long end = System.currentTimeMillis();
System.out.println(end-start);
//关闭流
put.close();
out.close();
}
}
注意事项: 关流(不然文件是存不进去的)
3.字符输入流
FileReader
package com.kz.a_Io;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Demo06 {
public static void main(String[] args) throws IOException {
//字符流 缓冲字符输入流
BufferedReader bufferedReader = new BufferedReader(new FileReader("d:/aa/2.txt"));
int length;
char[] chars=new char[10];
while ((length=bufferedReader.read(chars))!=-1){
System.out.println(new String(chars,0,length));
}
}
}
//字符流只能对文本进行操作,图片视频音频等需用字节流
4.字符输出流
FileWriter
package com.kz.a_Io;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class Demo07 {
public static void main(String[] args) throws IOException {
//缓存字符输出流
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("d:/aa/2.txt"));
String str="不要假装努力,生活不会陪你演习";
bufferedWriter.write(str);
//输出流切记关流
bufferedWriter.flush();//刷新
bufferedWriter.close();
}
}
write()方法的重载 可传多个参数
总结:
输入流:
两种:
字节输入流 : FileInputStream FileInputStream 对应的缓冲流 是BufferedInputStream
字符输入流: FileReader FileReader 对应的缓冲流 BufferedReader
read();
输出流:
两种:
字节输出流: FileOutputStream FileOutputStream 对应的缓冲流 BufferedOutputStream
字符输出流: FileWriter FileWriter 对应的缓冲流 BufferedWriter
write()
处理文本:均可使用
处理其他:必须使用字节流