一、文件流:
文件在程序中是以流的形式来操作的 。
流:数据在数据源(文件)和程序(内存)之间经历的路径。
输入流:数据从数据源(文件)到程序的路径。
输出流:数据从程序到数据源的路径。
注意:在完成程序时,应该是读取部分数据,就写入到指定文件!!!
使用完资源后,注意关闭流、释放资源!!!
(1)字节流byte:FileInputStream、FileOutputStream(如果磁盘中没有指定文件,系统会自动创建一个):优点:可以读取二进制文件。如:图片、视频...
缺点:读取汉字时,可能出现乱码
(2)字符流char:FileReader、FileWriter(一定要关闭资源,否则,写入的数据不会保存):优势:可以正常读取汉字
缺点:不可以读取二进制文件
(3)BufferedReader:处理流、 字符缓冲输入流、包装流。
BufferedReader类中 ,有属性Reader,即可以封装一个节点流,该节点流可以是任 意的,只要是Reader子类(以Reader结尾的是字符流)
*说明: * 1、bufferedReader.readLine() 是按行读取文件 * 2、当返回null时,表示文件读取完毕
(4)ObjectOutputStream、ObjectInputStream:序列化和反序列化
* 1、序列化后,保存的文件格式,不是纯文本,而是按照他的格式来保存(可能会出现乱码)
* 2、如果需要序列化某个对象(class),实现 接口 Serializable
* 1、如果我们希望调用Dog(类)的方法,需要向下转型
* 2、需要我们将Dog类的定义,拷贝到 可以引用的位置!!
public String toString() {//可视化 return "Dog{" + "name='" + name + '\'' + ", age=" + age + '}'; }
*3、Object dog=oi.readObject();
Dog dog1=(Dog)dog;
* 3、反序列化时注意
1、读取(反序列化)的顺序,需要和你保存数据(序列化)一致 、否则会出现异常
2、当序列化有类时如果你想 调用其方法时注意单写这个类并将其设置为公共类public
2、
文件创建:
String parentFile = "d:\\1.1\\App2_1.java\\Io流";
String fileName="news1.txt";
File file = new File(parentFile,fileName);
try {
file.createNewFile();
System.out.println("文件创建成功");
} catch (IOException e) {
e.printStackTrace();
}