按照操作数据单位不同分为:
字节流:8bit (操作二进制文件,保证文件无损操作
输入(顶层父类):FileInputStream 输出(顶层父类):FileOutputStream
字符流:按照字符为单位(效率高)
输入(顶层父类):Reader 输出(顶层父类):Writer
按照流的角色分类: 节点流,处理流/包装流
首先针对FileInputStream进行学习说明(写、读):在下面demo中,读取中文出现了乱码问题,在后续中可以解决。
package IO流.FileInputStream;
import java.io.*;
/**
* @program:多线程和IO
* @descripton:
* @author:ZhengCheng
* @create:2021/10/4-17:44
**/
public class Demo01 {
public void outputfile(String filepath){
File file = new File(filepath);
FileOutputStream fos = null ;
try {
// FileOutputStream fos = new FileOutputStream(file);//这样的写法是覆盖写
fos = new FileOutputStream(file,true);//这样的写法是续写
String s = "HelloWorld";
fos.write(s.getBytes());
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void inputfile(String filepath){
File file = new File(filepath);
FileInputStream fis = null;
int readlen = 0 ;
try {
while ((readlen=(fis.read(new byte[1024])))!=-1){//使用一个byte数组,提高效率
System.out.println((char)readlen);
}
}catch (IOException e) {
e.printStackTrace();
}finally {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
小Demo,复制文件:
package IO流.FileInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* @program:多线程和IO
* @descripton:复制一个文件
* @author:ZhengCheng
* @create:2021/10/4-18:50
**/
public class Demo02 {
public static void main(String[] args) {
new Demo02().copy("d:\\new1.txt","e:\\nnn.txt");
}
public void copy(String fromPath ,String toPath){
File fromFile = new File(fromPath);
File toFile = new File(toPath);
FileInputStream fis = null;
FileOutputStream fos = null;
try{
fos = new FileOutputStream(toFile);
fis = new FileInputStream(fromFile);
//read
int readlen = 0;
byte[] buffer = new byte[1024];
while ((readlen = fis.read(buffer)) != -1){
fos.write(buffer,0,readlen);
}
System.out.println("Finish");
}catch (IOException e){
e.printStackTrace();
}finally {
try {
fis.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
使用Writer和Reader来完成copy。不会中文乱码,因为是按照字符来读的。
package IO流.ReaderWriter;
import IO流.FileInputStream.Demo02;
import java.io.*;
/**
* @program:多线程和IO
* @descripton:Copy
* @author:ZhengCheng
* @create:2021/10/4-19:24
**/
public class Demo01 {
public static void main(String[] args) {
new Demo01().copy("d:\\new1.txt","e:\\nnn1.txt");
}
public void copy(String fromPath ,String toPath){
File fromFile = new File(fromPath);
File toFile = new File(toPath);
FileReader fr = null;
FileWriter fw = null;
try{
fw = new FileWriter(toFile);
fr = new FileReader(fromFile);
int readlen = 0 ;
char[] buffer = new char[1024];
while ((readlen = fr.read(buffer))!= -1){
fw.write(buffer,0,readlen);
fw.flush();//记得flush
}
System.out.println("Finish");
}catch (IOException e){
e.printStackTrace();
}finally {
try {
fr.close();
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
节点流: 从一个特定的数据源读写数据,如FileReader、FileWriter
处理流(包装流):是“连接”在已存在的流(节点流或处理流)之上,为程序提供更为强大的读写功能,如BufferReader(文件/其他数据源)、BufferWriter -------- 采用了装饰者模式

被折叠的 条评论
为什么被折叠?



