IO流

1、File

返回值方法名备注
booleancanRead()是否能读取该路径的文件
booleancanWrite()是否能编辑该路径的文件
booleancreateNewFile()创建一个新的文件 在这里插入图片描述
booleanmkdir()创建文件夹在这里插入图片描述
booleanmkdirs()创建多级文件夹在这里插入图片描述
booleandelete()删除文件或文件夹在这里插入图片描述
booleanexists()查看文件是否存在在这里插入图片描述
Longlength()返回文件的长度在这里插入图片描述
StringgetName()获取文件名在这里插入图片描述
StringgetPath()获取文件路径在这里插入图片描述
StringgetAbsolutePath()返回此抽象路径名的绝对路径名字符串在这里插入图片描述
booleanisDirectory()判断是否为文件夹在这里插入图片描述
FilelistFiles()获取所有文件和文件夹在这里插入图片描述

2、IO流

2.1 字节流

字节流:读取一切文件,
FileInputStream和FileOutputStream数据量比较大的时候速度比较慢,可以使用BufferedInputStream和BufferedOutputStream

2.1.1 字节输入流

2.1.1.1 FileInputStream

从文档中读取信息,read()

//        FileInputStream fileInputStream = new FileInputStream("E:\\FileTest\\123.txt");
        File file = new File("E:\\FileTest\\123.txt");
        //可以直接传字符串的路径,也可以传file进去
        FileInputStream fileInputStream = new FileInputStream(file);
        int ch=0;
        //read()读不到东西就会等于-1,所以只要不等于-1就输出
        while ((ch=fileInputStream.read())!=-1){
            System.out.print((char)ch);
        }

        fileInputStream.close();
2.1.1.2 BufferedInputStream

BufferedInputStream:字节缓冲输入流

        InputStream fis = new FileInputStream("E:\\FileTest\\123.txt");
        BufferedInputStream bis=new BufferedInputStream(fis);
        //每次读取数据的大小,理论上来说数值越大,速度越快
        byte[] bytes = new byte[1024];
        int len=0;
        while ((len=bis.read(bytes))!=-1){
            System.out.println(len);
        }
        fis.close();
        bis.close();

2.1.2 字节输出流

2.1.2.1 FileOutputStream

write(byte[] b) :在文件中写入字节数组

        String str=IoDemo01.class.getName();
        //FileOutputStream可以有两个参数,第一个参数是路径,如果这个路径不存在,就在该路径创建一个,第二个参数为是否追加到文件尾部,
        // 也可以不写第二个参数,默认是false,覆盖原有的信息,如果想要设置为追加,改为true
        FileOutputStream out=new FileOutputStream("E:\\\\FileTest\\\\111.txt",true);
        out.write(str.getBytes());
        out.close();

write(int b) :在文件中写入字节

        FileInputStream fs = new FileInputStream("E:\\FileTest\\123.txt");
        FileOutputStream fo=new FileOutputStream("E:\\\\FileTest\\\\111.txt");
        int ch=0;
        //从fs中读出一个个字节,然后一个个字节再写入fo中
        while ((ch=fs.read())!=-1){
            fo.write(ch);
        }
        fs.close();
        fo.close();
2.1.2.2 BufferedOutputStream
        Long start=System.currentTimeMillis();
        InputStream fis=new FileInputStream("F:\\迅雷下载\\ideaIU-2020.1.exe");
        BufferedInputStream bis=new BufferedInputStream(fis);
        OutputStream fos = new FileOutputStream("E:\\FileTest\\ideaIU-2020.2.exe");
        BufferedOutputStream bos=new BufferedOutputStream(fos);
        //每次读取数据的大小,理论上来说数值越大,速度越快
        byte[] bytes = new byte[1024];
        int len=0;
        while ((len=bis.read(bytes))!=-1){
            bos.write(bytes,0,len);
        }
        bis.close();
        bos.close();
        Long end=System.currentTimeMillis();
        System.out.println(end-start);

2.2 字符流

读取纯文本文件方便,帮我们处理了乱码问题。Buffered效率高

2.2.1 字符输入流

2.2.1.1 FileReader
        FileReader fileReader = new FileReader("E:\\FileTest\\111.txt");
        char[] chars = new char[1024];
        int len=0;
        while ((len=fileReader.read(chars))!=-1){
            System.out.println(len);
            //char数组转成Strings输出,从chars的下标0开始,读取长度len
            String str=new String(chars,0,len);
            System.out.println(str);
        }
        fileReader.close();
2.2.1.2 BufferedReader
Reader reader = new FileReader("E:\\FileTest\\111.txt");
BufferedReader bufferedReader = new BufferedReader(reader);
char[] chars = new char[1024];
int len=0;
while ((len=bufferedReader.read(chars))!=-1){
    //char数组转成Strings输出,从chars的下标0开始,读取长度len
    String str=new String(chars,0,len);
    System.out.println(str);
}

2.2.2 字符输出流

2.2.2.1 FileWriter
String str="//char数组转成Strings输出,从chars的下标0开始,读取长度len";

//拿到要输出的对象,可以设置第二个参数boolean类型,不设置默认false,true就是追加在文本末尾,false是覆盖原有文本
FileWriter fileWriter = new FileWriter("E:\\FileTest\\111.txt",true);

//写入
fileWriter.write(str);

fileWriter.close();
2.2.2.2 BufferedWriter
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("E:\\FileTest\\111.txt"));
bufferedWriter.write("用于读取字符流的抽象类。 子类必须实现的唯一方法是read(char [],int,int)和close()。 然而,大多数子类将覆盖这里定义的一些方法,以便提供更高的效率,附加的功能或两者。 ");
//和其它的不一样,必须flush才能写到指定文本
bufferedWriter.flush();
bufferedWriter.close();

3、获取大小

不管哪种方法,获取的大小基本都有误差,使用第三种就可以了

3.1 File通过length()

只有File有这个方法,FileInputStream没有

3.2 通过available()

它返回值是int,文件太大的话,会达到int的上限

3.3 通过FileChannel工具

fs.getChannel().size()获取大小

MultipartFile获取文件大小

MultipartFile的getSize()方法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值