JAVA基础复习-IO流

4 篇文章 0 订阅
4 篇文章 0 订阅

一、创建文件,借助File类来实现


file.createNewFile() : 创建文件
file.exists() : 判断文件是否存在,如果存在,则返回true
delete() : 删除文件,如果删除成功,则返回true
deleteOnExit() : 程序退出的时候才删除文件

import java.io.File;
import java.io.IOException;

public class FileDemo {
    
    public static void main(String[] args) throws IOException {
        File file = new File("D:\\123.txt");
        //判断文件是否存在
        if(!file.exists()){
            //文件不存在,创建该文件
            file.createNewFile();
        }
        
    }
}

二、创建文件夹


exists() : 判断文件夹是否存在,如果存在,则返回true
delete() : 删除文件夹,如果删除成功,则返回true
mkdir() : 创建文件夹
mkdirs() : 创建嵌套的文件夹

import java.io.File;
import java.io.IOException;

public class FileDemo {
    
    public static void main(String[] args) throws IOException {
        File file = new File("D:\\test");
        //判断文件是否存在
        if(!file.exists()){
            //文件不存在,创建该文件
            file.mkdir();
        }
        
        //多个文件夹嵌套时,使用mkdirs()方法创建文件
        File file2 = new File("D:\\test2\\demo");
        //判断文件是否存在
        if(!file2.exists()){
            //文件不存在,创建该文件
            file2.mkdirs();
        }
        
    }
}

三.输入输出流

字节流和字符流,都可以实现文本的输入输出,区别是读写单位(速度)不一样
字节流:每次读写一个字节 1Byte=8bit 2^8-1 可以表示255个字符
字符流:每次读写一个字符 1字符=2字节 常见汉字5000多 2^16

节点流和过滤流都是对字节流和字符流做了封装,好处是读写速度更快。
1.字节流: FileInputStream 和 FileOutputStream
FileInputStream
read() :每次都一个字节,返回值是int,如果读到头,返回值是-1 想要读完文本中的数据,要用循环 
available() :返回可读的字节数,返回值是int
close() :关闭输入流,释放资源

FileOutputStream
write() :向指定文件写数据
close() :关闭输出流

 

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 字节流演示
 * @author Administrator
 *
 */
public class FileInputDemo {

    public static void main(String[] args) throws IOException {
        
        //打开字节输入流
        FileInputStream fis = new FileInputStream(new File("D:\\720.txt"));
        //打开字节输出流
        FileOutputStream fos = new FileOutputStream(new File("D:\\721.txt"));
        //获取字节长度
        int length = fis.available();
        for(int i =0 ; i < length ; i++){
            //把从720.txt读取的字节输出到721.txt中
            fos.write(fis.read());
        }
        
        //关闭输入输出流
        fis.close();
        fos.close();
        
    }
    
}

2.字符流 :FileReader FileWriter

FileReader
read() : 读 参数可以是char数组,存放读到内存中的数据
close() : 关闭资源

FileWriter
write() :写 参数可以是char数组,也可以是String
close() : 关闭资源

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class FileReaderDemo {

    public static void main(String[] args) throws IOException {

        FileReader fr = new FileReader(new File("D:\\720.txt"));
        FileWriter fw = new FileWriter(new File("D:\\721.txt"));
        char[] ch = new char[1024];
        int i=0;
        String s="";
        while((i=fr.read())!=-1){
            //把int类型的 i ,强转为char类型
            s=s+(char)i;
        }
        
        //把取出的内容写入到721.txt中
        fw.write(s);
        fr.close();
        fw.close();
    }

}

从流向分
输入流 FileInputStream FileReader
输出流 FileOutputStream FileWriter
从读写单位
字节流 FileInputStream FileOutputStream 
字符流 FileReader FileWriter

 

补充: 过滤流:给节点流做封装,提供缓冲区,读写速度会更快
BufferedReader
readLine() :每次读取一行
BufferedWriter
write() :写
newLine() :换行

import java.io.*;
public class BufferedDemo {

    public static void main(String[] args) throws IOException {
        BufferedReader bfr = new BufferedReader(new FileReader(new File("D:\\720.txt")));
        BufferedWriter bfw = new BufferedWriter(new FileWriter(new File("D:\\721.txt")));
        //每次读取一行
        String str = bfr.readLine();
        String ss = str;
        while(str!=null){
            System.out.println(str);
            str = bfr.readLine();
            
            //每拼接一次要换行,换行符也可以写成
            //ss= ss+System.getProperty("line.separator")+str;
            ss = ss + "\r\n" + str;
        }
        bfw.write(ss);
        bfr.close();
        bfw.close();
        
    }
    
}

补充:序列化(Serializable)和反序列化 读写对象 读对象就是反序列化 写对象就是序列化
一个对象想要被序列化,必须实现一个接口:Serializable
ObjectOutputStream
writeObject(obj) :把对象obj作为整体以二进制流的形式写到指定文本中

ObjectInputStream
readObject() :把文本中的二进制对象读入内存

问: 当我们要保存多个对象的时候怎么办?可以多次调用writeObject()实现写,但是读的时候就麻烦了,我们可以把对象放到一个数组中,对数组执行序列化和反序列化操作

import java.io.Serializable;
/**
 * 创建一个学生类,实现Serializable接口
 * @author Administrator
 *
 */
public class Student implements Serializable{

    public String name;
    public String sex;
    
}

如果学生类没有实现Serializable接口,会报错java.io.NotSerializableException

对学生对象序列化后,会在磁盘中保存一个二进制文件

import java.io.*;

/**
 * 序列化类
 * @author Administrator
 *
 */
public class XuLieDemo {

    public static void main(String[] args) throws  IOException {
        
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("D:\\123.txt")));
        //声明一个学生类型是数组,把实例化的学生对象存入数组中
        Student[] stu = {new Student("张三","男"),new Student("丽丽","女")};
        //对学生类型的数组序列化
        oos.writeObject(stu);
        oos.close();
        
    }
    
}

反序列化操作

import java.io.*;

/**
 * 反序列化类
 * @author Administrator
 *
 */
public class FanXuLieDemo {

    public static void main(String[] args) throws IOException, ClassNotFoundException {

        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("D:\\123.txt")));
        Student[] stu = (Student[]) ois.readObject();
        for (Student student : stu) {
            System.out.println(student.name+"  "+student.sex);
        }
        ois.close();
        
    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值