IO是指input/output,即输入和输出。输入和输出是以内存为中心的:
input 从外部往内存输入数据,比如硬盘中的数据写入内存等。
output 从内存往外输出数据,比如内存数据写入硬盘等。
File
File类表示一个文件或者一个目录。使用File对象可以对磁盘进行读写操作。
常用操作
//绝对路径或者相对路径 String pathname="E:\\demo\\file\\"; //1.打开文件 File file=new File(pathname); if(!file.exists()) {//2.创建文件file.createNewFile();//创建目录file.mkdir(); } //3.判断类型 System.out.println(file.isFile()); if (file.isDirectory()) {//4.获取当前目录下的所有文件和目录File[] files = file.listFiles();//获取当前目录下以.txt结尾的文件File[] listFiles = file.listFiles(((dir, name) -> dir.isFile() && name.endsWith(".txt"))); } //5.获取父目录 File parentFile = file.getParentFile(); //6.删除文件 file.delete(); file.deleteOnExit();
InputStream
InputStream是java.io包下的最基本的输入流。InputStream是一个抽象类,是所有输入流的超类。
常用操作
available() - 返回输入流中可用的字节数
read() - 从输入流中读取一个字节的数据
read(byte[] array) - 从流中读取字节并存储在指定的数组中
close() - 关闭输入流
常用子类
FileInputStream
用于从文件中读取字节数据。FileInputStream其他方法
getChannel() - 返回FileChannel与输入流关联的对象
getFD() - 返回FileDescriptor与输入流关联的文件描述符
public class Test {public static void main(String[] args) throws Exception {//绝对路径或者相对路径String pathname="E:\\demo\\file\\text1.txt";//打开文件File file = new File(pathname);//判断是不是可用文件if (file.exists() && file.isFile()) {//1.创建输入流FileInputStream inputStream = new FileInputStream(file);//2.获取输入流的长度int available = inputStream.available();//3.读取一个字符int read = inputStream.read();//4.批量读取byte[] data = new byte[Math.min(available, 256)];int len = 0;while ((len = inputStream.read(data)) > 0) {System.out.println(new String(data, 0, len));}//5.关闭输入流inputStream.close();}} }
ByteArrayInputStream
用于从字节数组读取字节数据。
public class Test {public static void main(String[] args) throws Exception {//1.创建输入流ByteArrayInputStream inputStream = new ByteArrayInputStream("ByteArrayInputStream".getBytes(StandardCharsets.UTF_8));//2.获取输入流的长度int available = inputStream.available();//3.读取一个字符int read = inputStream.read();//4.批量读取byte[] data = new byte[Math.min(available, 256)];int len = 0;while ((len = inputStream.read(data)) > 0) {System.out.println(new String(data, 0, len));}//5.关闭输入流inputStream.close();} }
ObjectInputStream
用于读取对象。主要用于读取ObjectOutputStream写入的数据。ObjectInputStream的其他方法
public class Test implements Serializable {private String name;public Test(String name) {this.name = name;}@Overridepublic String toString() {return "Test{" +"name='" + name + '\'' +'}';}public static void main(String[] args) throws Exception {//序列化对象ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(2048);ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);objectOutputStream.writeObject(new Test("test"));byte[] bytes = byteArrayOutputStream.toByteArray();byteArrayOutputStream.close();objectOutputStream.close();//1.创建输入流ObjectInputStream inputStream = new ObjectInputStream(new ByteArrayInputStream(bytes));//2.获取对象Object object = inputStream.readObject();if (Objects.nonNull(object) && object instanceof Test) {System.out.println(object);}//3.关闭输入流inputStream.close();} }
OutputStream
OutputStream是java.io包下的最基本的输出流流。OutputStream是一个抽象类,是所有输出流的超类。
常用操作
write(int ) - 将指定的字节写入输出流
write(byte[] array) - 将指定数组中的字节写入输出流
flush() - 强制将输出流中存在的所有数据写入目标
close() - 关闭输出流
public class Test implements Serializable {public static void main(String[] args) throws Exception {//绝对路径或者相对路径String pathname="E:\\demo\\text1.txt";//打开文件File file = new File(pathname);//判断是不是可用文件if (file.exists() && file.isFile()) {//1.创建输入流OutputStream outputStream = new FileOutputStream(pathname);//2.数据写入到输出流outputStream.write(1);outputStream.write("hello world".getBytes(StandardCharsets.UTF_8));//3.输出流数据写入到目标outputStream.flush();//4.关闭输出流outputStream.close();}} }
常用子类
FileOutputStream
用于将字节数据写入到文件中。FileOutputStream其他方法
getChannel() - 返回FileChannel与输入流关联的对象
getFD() - 返回FileDescriptor与输入流关联的文件描述符
ByteArrayOutputStream
用于将字节数据写入到字节数组中。ByteArrayOutputStream其他方法
toString() - 字节数组转成String对象并返回
toByteArray() - 返回字节数组
writeTo(OutputStream out) - 字节数组写入到输出流中
ObjectOutputStream
ObjectOutputStream其他方法
Reader
Reader是一个字符为单位的输入流接口
常用操作
read() - 从输入流中读取一个字符的数据
read(char[] array) - 从流中读取字符并存储在指定的数组中
read(CharBuffer buffer) - 从流中读取字符并存储在指定的缓冲区中
close() - 关闭输入流
常用子类
FileReader
public class Test implements Serializable {public static void main(String[] args) throws Exception{//绝对路径或者相对路径String pathname="E:\\demo\\text1.txt";//打开文件File file = new File(pathname);//判断是不是可用文件if (file.exists() && file.isFile()) {//1.创建输入流Reader reader = new FileReader(file);//2.读取一个字符int read = reader.read();//3.批量读取CharBuffer charBuffer=CharBuffer.allocate(256);while (reader.read(charBuffer) > 0) {//从写模式切换到读模式charBuffer.flip();System.out.println(charBuffer);//清空缓冲区charBuffer.clear();}int len = 0;char[] data = new char[256];while ((len = reader.read(data)) > 0) {System.out.println(new String(data, 0, len));}//4.关闭输入流reader.close();}} }
CharArrayReader
InputStreamReader
Writer
Writer是一个字符为单位的输出流接口
常用操作
write(int c) - 写入一个字符
write(String str) - 写入一个字符串
write(char[] array) -写入一个字符数组
close() - 关闭输入流
常用子类
FileWriter
public class Test implements Serializable {public static void main(String[] args) throws Exception{//绝对路径或者相对路径String pathname="E:\\demo\\text1.txt";//打开文件File file = new File(pathname);//判断是不是可用文件if (file.exists() && file.isFile()) {char[] buffer = new char[128];//1.创建输出流FileWriter writer = new FileWriter(file);//2.写入一个字符writer.write(12);//3.写入字符串writer.write("hello world");writer.flush();//4.关闭输出流writer.close();}} }
CharArrayWriter
OutputStreamWriter