文件IO,指的就是程序对文件的各种操作(通常指读(Input)写(Output)),该知识点非常简单,至少比C/C++里面的实现简单了不少(指使用)。
一般的我们只需要了解和学习几个简单文件类的使用方法即可,即File类、字节流读写、字符流读写。
字节流读写
InputStream
简介:
这是一个抽象类,其父类为Object,属于lang包,实现了Closeable类,一般用于多态,是所有字节输入流的超类
常用方法:
close(); //关闭输入流并释放资源,用完之后必须进行释放
read(); //读取输入流中的下一个字节
read(byte[] b); //read()的重载,从输入流读取一定字节,存入缓冲数组b中
read(byte[] b,int off,int len); //read()的重载,表示读取最多len个字节到b数组
使用方法:
一般使用多态的方法调用,作为子类。
例如:
InputStream in = new FileInputStream("Path");
in.read(); //从path中读取字符
in.close();
FileInputStream
简介:
父类为InputStream,一般用于从文件中读取字节,如果需要读取字符,可以考虑使用FileReader
常用方法:
close(); //关闭输入流并释放资源,用完之后必须进行释放
read(); //读取输入流中的下一个字节
read(byte[] b); //read()的重载,从输入流读取一定字节,存入缓冲数组b中
read(byte[] b,int off,int len); //read()的重载,表示读取最多len个字节到b数组
使用方法:
这是一个abstract类,不能将其实例化,因此一般使用多态的方法,将其作为父类
例如:
InputStream in = new FileInputStream("Path");
in.read(); //从path中读取字符
in.close();
BufferedInputStream
简介:
这BufferedFileInputStream类是一个添加了缓存数组的高速读入类,在其类中存在一个buf数组
常用方法:
close(); //关闭输入流并释放资源,用完之后必须进行释放
read(); //读取输入流中的下一个字节
read(byte[] b,int off,int len); //read()的重载,表示读取最多len个字节到b数组
使用方法:
BufferedInputStream bi = new BufferedInputStream(new FileInputStream(new File("C://help.txt")));
System.out.println(bi.read());
bi.close(); //关闭输入流并释放资源,用完之后必须进行释放
OutputStream
简介:
这是一个抽象类,其父类为Object,属于lang包,实现了Closeable、Flushable类,一般用于多态,是所有字节输入流的超类
常用方法:
close(); //关闭输出流并释放资源,用完之后必须进行释放
write(byte[] b); //关闭输入流并释放资源,用完之后必须进行释放
write(int b); //关闭输入流并释放资源,用完之后必须进行释放
write(byte[] b,int off,int len); //关闭输入流并释放资源,用完之后必须进行释放
flush(); //关闭输入流并释放资源,用完之后必须进行释放
使用方法:
这是一个abstract类,不能将其实例化,因此一般使用多态的方法,将其作为父类
例如:
File file = new File(C://help.txt");
OutputStream out = new FileOutputStream(file);
out.write(65);
out.close();
InputStream in = new FileInputStream(file);
System.out.println(in.read());
in.close();
FileOutputStream
简介:
父类为OutputStream,一般用于向文件中写入字节,如果需要写入字符,可以考虑使用FileWrite
常用方法:
close(); //关闭输出流并释放资源,用完之后必须进行释放
write(byte[] b); //关闭输入流并释放资源,用完之后必须进行释放
write(int b); //关闭输入流并释放资源,用完之后必须进行释放
write(byte[] b,int off,int len); //关闭输入流并释放资源,用完之后必须进行释放
flush(); //关闭输入流并释放资源,用完之后必须进行释放
使用方法:
这是一个abstract类,不能将其实例化,因此一般使用多态的方法,将其作为父类
例如:
File file = new File("C://help.txt");
OutputStream out = new FileOutputStream(file);
out.write(65);
out.close();
InputStream in = new FileInputStream(file);
System.out.println(in.read());
in.close();
BufferedOutputStream
简介:
这是一个抽象类,其父类为Object,属于lang包,实现了Closeable类,一般用于多态,是所有字节输入流的超类
常用方法:
close(); //关闭输出流并释放资源,用完之后必须进行释放
write(byte[] b); //写入
write(int b); //关闭输入流并释放资源,用完之后必须进行释放
write(byte[] b,int off,int len); //关闭输入流并释放资源,用完之后必须进行释放
flush(); //关闭输入流并释放资源,用完之后必须进行释放
使用方法:
BufferedOutputStream bo = new BufferedOutputStream(new FileOutputStream("C://help.txt"));
bo.write(12);
bo.close();
BufferedInputStream bi = new BufferedInputStream(new FileInputStream("C://help.txt"));
System.out.println(bi.read());
bi.close();
字符流读写
Reader
简介:
这是一个抽象类,其父类为Object,属于lang包,实现了Closeable、Readable类,一般用于多态
常用方法:
close(); //关闭流并释放资源,用完之后必须进行释放
read(); //读取一个字节
read(byte[] b); //read()的重载,将字符读入数组
使用方法:
Reader reader = new FileReader("C://help.txt");
System.out.println(reader.read());
FileReader
简介:
简单的字符读入实现,没有特有方法,因此一般用多态的方式创建,常用于BufferedReader的参数
常用方法:
close(); //关闭流并释放资源,用完之后必须进行释放
read(); //读取一个字节
read(byte[] b); //read()的重载,将字符读入数组
使用方法:
Reader reader = new FileReader("C://help.txt");
Writer writer = new FileWriter("C://help.txt");
writer.write("hehe");
writer.close();
System.out.println(reader.read());
reader.close();
BufferedReader
简介:
通过缓存读取字符,内部有一个缓存数组
常用方法:
close(); //关闭流并释放资源,用完之后必须进行释放
read(); //读取一个字节
read(byte[] b); //read()的重载,将字符读入数组
使用方法:
package app;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
/**
* Test2
*/
public class Test2 {
public static void main(String[] args) {
Reader r = null; // 创建Reader对象
Writer w = null;
try {
r = new BufferedReader(new FileReader("C://help.txt")); // new一个BF类
w = new BufferedWriter(new FileWriter("C://help.txt")); // new一个BW类
w.write("123"); // 写入文件
w.close();
System.out.println(r.read()); // 打印
} catch (Exception e) {
} finally { // 确保r必定被回收
try {
r.close(); // 关闭资源
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Writer
简介:
是一个抽象类,字符流读取的父类,只能用于读取字符,否则会出现乱码
常用方法:
close(); //关闭输出流并释放资源,用完之后必须进行释放
write(byte[] b); //写入
flush(); //刷新资源,默认在执行close后会自动刷新
使用方法:
Reader reader = new FileReader("C://help.txt");
Writer writer = new FileWriter("C://help.txt");
writer.write("hehe");
writer.close();
System.out.println(reader.read());
reader.close();
FileWriter
简介:
用来写入字符文件的便捷类
常用方法:
close(); //关闭输出流并释放资源,用完之后必须进行释放
write(byte[] b); //写入
flush(); //刷新资源,默认在执行close后会自动刷新
使用方法:
Reader reader = new FileReader("C://help.txt");
Writer writer = new FileWriter("C://help.txt");
writer.write("hehe");
writer.close();
System.out.println(reader.read());
reader.close();
BufferedWriter
简介:
通过缓存写入字符,内部有一个缓存数组
常用方法:
close(); //关闭输出流并释放资源,用完之后必须进行释放
write(byte[] b); //写入
flush(); //刷新资源,默认在执行close后会自动刷新
使用方法:
package app;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
/**
* Test2
*/
public class Test2 {
public static void main(String[] args) {
Reader r = null; // 创建Reader对象
Writer w = null;
try {
r = new BufferedReader(new FileReader("C://help.txt")); // new一个BF类
w = new BufferedWriter(new FileWriter("C://help.txt")); // new一个BW类
w.write("123"); // 写入文件
w.close();
System.out.println(r.read()); // 打印
} catch (Exception e) {
} finally { // 确保r必定被回收
try {
r.close(); // 关闭资源
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
字符流转字节流
InputStreamReader
简介:
将读入的字节作为字符解释,定义方式为:BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
常用方法:
close(); //关闭流并释放资源,用完之后必须进行释放
read(); //读取一个字节
使用方法:
public static void main(String[] args) {
BufferedReader in = null;
BufferedWriter out = null;
try {
in = new BufferedReader(new InputStreamReader(new FileInputStream("C://help.txt")));
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("C://help.txt")));
// BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
out.write("早上好");
try {
out.close();
} catch (Exception e) {
// TODO: handle exception
}
System.out.println(in.read());
} catch (Exception e) {
// TODO: handle exception
} finally {
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
OutputStreamWriter
简介:
将读入的字节作为字符解释,定义方式为:BufferedWriter in = new BufferedWriter(new InputStreamWriter(System.in));
常用方法:
close(); //关闭输出流并释放资源,用完之后必须进行释放
write(byte[] b); //写入
flush(); //刷新资源,默认在执行close后会自动刷新
使用方法:
public static void main(String[] args) {
BufferedReader in = null;
BufferedWriter out = null;
try {
in = new BufferedReader(new InputStreamReader(new FileInputStream("C://help.txt")));
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("C://help.txt")));
// BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
out.write("早上好");
try {
out.close();
} catch (Exception e) {
// TODO: handle exception
}
System.out.println(in.read());
} catch (Exception e) {
// TODO: handle exception
} finally {
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}