Java 高级运用IO流

File

File概述

File: 文件的意思(文件和文件夹),对计算机来说,文件就是指定盘符下的文件或者文件夹
即,Java中把文件或者目录(文件夹)都封装成File对象。也就是说如果我们要去操作硬盘上的文件,或者文件夹只要找到File这个类即可

File常用方法

构造方法:
== public File(String pathname) pathname: 文件的路径 ==
常用的方法:
创建文件: public boolean createNewFile() 创建文件,如果文件存在,就不创建,返回false
创建文件夹: public boolean mkdir() 创建文件夹,如果文件夹存在,就不创建,返回false, 只能创建单个文件夹 mkdir (make directory)
创建多层文件夹: public boolean mkdirs() 创建文件夹,如果文件夹存在,就不创建,返回false, 可以创建多层文件夹 mkdirs
判断是否是文件: public boolean isFile()
判断是否是文件夹: public boolean isDirectory()
判断文件是否存在: public boolean exists()
获取文件的大小: public long length() 返回的是字节个数 结果/1024/1024 就是MB
获取某个文件夹下面的文件: public String[] list() 返回的是字符串数组,表示的是文件夹下面的文件或者文件夹的名称

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

        File file = new File("\\D:\\leidian\\火影忍者1.zip");
        boolean a = file.createNewFile();
        System.out.println(file);

        File file1 = new  File("\\D:\\leidian\\火影忍者.jpg");
        boolean b1 = file1.createNewFile();
        System.out.println(b1);

        File file2 = new File("\\D:\\leidian\\火影忍者");
        boolean mkdir1 = file2.mkdir();
        System.out.println(mkdir1);

        File file3 = new File("\\D:\\leidian\\火影忍者\\小七班");
        boolean mkdir2 = file3.mkdirs();
        System.out.println(mkdir2);

        boolean b3 = file1.isFile();
        boolean b4 = file3.isDirectory();
        System.out.println(b3);
        System.out.println(b4);

        System.out.println(file1.isDirectory());
        System.out.println(file1.exists());
        long length = file.length();
        System.out.println(length/1024/1024+"MB");
        System.out.println(file.separator);

        File file4 = new File("\\D:\\leidian\\火影忍者\\小七班");
        String[] list = file.list();
        System.out.println(Arrays.toString(list));
    }


}

流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为插入操作。用来进行输入输出操作的流就称为IO流。换句话说,IO流就是以流的方式进行输入输出 。

字节输入/输出流

FileInputStream
read():读取一个字节,每次读完以后,下次就会读取下一个字节
read(byte[] b): 每次读取b.length个字节,读取到的字节存储在b数组中,数组里面放的就是读取到的数据,返回值是读取了多少个字

字符输入/输入流

字符流的底层还是字节流, 字符流是专门处理文本的
字符输入流: FileReader
字符输出流: FileWriter

{
        try {
            FileReader reader = new FileReader("d:\\leidian\\火影忍者.txt");
            char[] chars = new char[1024];
            
            int read = reader.read(chars);
            
            System.out.println(read);
            String s = new String(chars, 0, read);
            System.out.println(s);
            
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

文件复制

文件的拷贝: 思路就是从一个磁盘里面读取的时候,写到另外一个磁盘里面。

{
        FileInputStream fis = null;
        FileOutputStream fos = null;
        long Start = System.currentTimeMillis();
        try {
            fis = new FileInputStream("\\D:\\leidian\\火影忍者.apk");
            fos = new FileOutputStream("\\D:\\leidian\\火影忍者\\小七班.apk");
            byte[] bytes = new byte[2048 * 2048*2];
//            int len = fis.read(bytes);
//            while (len!=1){
//                fos.write(bytes,0,len);
//                len = fis.read(bytes);
//            }
            int len = 0;
            while ((len = fis.read(bytes)) != 1) {
                fos.write(bytes, 0, len);

            }
            long end = System.currentTimeMillis();
            System.out.println("拷贝完毕");
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            if (fis != null){
                try{
                    fis.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            if (fos!= null){
                try{
                    fos.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值