Java基础篇——IO流
流
内存和存储设备之间传输数据的通道
流的分类
- 按方向划分
- 输入流(读):存储设备→内存
- 输出流(写):内存→存储设备
- 按单位划分、
- 字节流:以字节为单位,可以读写所有数据
- 字符流:以字符为单位,只能读写文本数据
- 按功能划分
- 节点流:具有实际传输数据的读写功能
- 过滤流:在节点流的基础上增强功能
字节流
字节流的父类(InputStream 、 OutStream)
文件字节流
-
FileInputStream
public int read(){}//读取单个字节 public int read(byte[]b) {}//读取多个字节 //读取完毕后会返回-1 -
FileOutputStream
public void write(int n) {}//单字节写入 public void write(byte[]b) {}//多字节写入
字节缓冲流
数据存储在缓冲区中,提高IO效率
BufferedInputStream/BufferedOutputStream
实例化字节缓冲流对象时需要一个底层流对象作为构造参数,eg:
-
BufferedInputStream in=new BufferedInputStream(new FileInputStream("路径")); //缓冲区的大小为8k
对象流
ObjectInputStream/ObjectOutputStream
内存 序列化> 存储设备 反序列化> 内存
调用readObject/writeObject读写对象
(1)进行序列化和反序列化的类必须实现serializable接口
-
public interface Serializable { }//该接口并没有抽象方法,只用来标记一个类可以被序列化
实例化对象流对象时也需要底层流对象作为构造参数
(2)除此之外,在此类内类类型的属性同样要实现serializable接口
(3)可以使用transient修饰符修饰类属性使其不被序列化,并且静态属性也不能序列化
(4)可以序列化一个集合来达到同时序列化多个对象的目的,此时反序列化的返回值也是一个集合
字符编码

字符流
字符流的父类(Reader 、Writer)
文件字符流
- FileReader
- FileWriter
与文件字节流实例化方法基本相同,只是传输的最小单位变为字符
文件字符流不能复制图片文件或者二进制文件
字符缓冲流
-
BufferedReader
//readLine()方法,读取 一行文本 -
BufferedWriter
//newLine()方法,写入一个换行符,便于多系统移植
打印流(PrintWriter)
转换流
可指定编码的字节字符转换流
-
InputStreamReader
-
OutputStreamWriter
例如:
new InputStreamReader(file,"UTF-8"); //file为一个底层流对象,指定用utf-8编码读取文件
File类
代表物理盘符中的一个文件或者一个文件夹
-
createNewFile()//创建 -一个新文件 mkdir()//创建一个新目录 delete()//删除文件或空目录 exists()//判断File对象所对象所代表的对象是否存在 getAbsolutePath()//获取文件的绝对路径 getName()//取得名字 getParent ()//获取文件/目录所在的目录 isDirectory()//是否是目录 isFile()//是否是文件 length()//获得文件的长度 listFiles()//列出目录中的所有内容 renameTo() //修改文件名为 -
文件过滤器
FileFilter接口
File[] array=file.listFiles(new FileFilter() { @Override public boolean accept(File pathname) { if (pathname.getName().endsWith("txt")) return true; else return false; }//重写accept方法 }//匿名内部类 );//file为一个File类对象,调用listFiles方法实现过滤

浙公网安备 33010602011771号