java-IO字节流

在这里插入图片描述
前言:
1.input,把硬盘文件中的数据读入到内存中称为输入,负责读。2.output,把内存中的数据写入到硬盘中称为输出,负责写。
3.IO流:字节流(操作所有类型的文件)、字符流(只能操作纯文本文件)。

1.几个File的API

//绝对路径带盘符  相对路径从当前工程(本文件位置)开始
//通过绝对路径读取  File.separator兼容不同路径
File file = new File("D:" + File.separator + "\\One Drive\\OneDrive\\桌面\\图片get");
//几个重要的文件操作方法
System.out.println(new SimpleDateFormat("时间"+"yyyy-MM-dd HH:mm:ss").format(file.lastModified()));//最后修改文件时间,格式固定
System.out.println(file.getAbsoluteFile());//返回文件的绝对路径
//通过相对路径  /就不用转义,如果使用的是绝对路径需要把\改为\\
File file1 = new File("桌面/图片get");
        System.out.println(file1.getAbsoluteFile());//得到绝对路径
        System.out.println(file1.getName());//得到文件名

        //创建文件
        File file2 = new File("D:/test/test");
        System.out.println(file2.exists());
        //如果不存在就创建
        if (!file2.exists()) {
            file2.mkdirs();
        }
        //默认删除空文件夹
        System.out.println(file2.delete());

//文件遍历  只能遍历一级
//list()和listFiles()方法区别: 1.返回值类型不同:前者为String数组,后者为File对象数组 2.数组中元素内容不同:前者为string类型的【文件名】(包含后缀名),后者为File对象类型的【完整路径】
        File file3 = new File("D:\\One Drive\\OneDrive\\桌面\\图片get");
        String[] list = file3.list();
        for (String s : list) {
            System.out.println(s);
        }
/*        File[] files = file3.listFiles();
        for (File file4 : files) {
            System.out.println(file4);
        }*/

list的运行结果:
带后缀名
listFiles的运行结果:
带完整路径和后缀名

InputStream和OutStream

//编码 默认为utf-8
        //byte[]bytes="abc嗷嗷".getBytes();通过平台默认的字符集编码
        byte[] bytes = "abc嗷嗷".getBytes("GBK"); //通过指定的字符集编码
        System.out.println(Arrays.toString(bytes));
        //结果为:[97, 98, 99, -32, -69, -32, -69]
        //解码
        //String str=new String(bytes);
        String str = new String(bytes, "GBK");//指定字符集解码
        System.out.println(str);
        //结果为:abc嗷嗷
File file = new File("D:\\JAVA-project\\src\\Week3day4\\test");
InputStream inputStream = new FileInputStream(file);
//遍历读出的方法,文件中有中文会乱码
        int c;
        while ((c = inputStream.read()) != -1) {
            System.out.print((char) c);//abc
        }

结果:
在这里插入图片描述

        //为提高效率可以把文件数据一次性全部读取到一个字节数组可以避免乱码,但是如果文件过大可能会引起内存溢出,不发生乱码
        InputStream inputStream = new FileInputStream(file);
        //每次读取一个字符数组,如果没有可读的就返回-1
        byte[] buffer = new byte[(int) file.length()];
        int read = inputStream.read(buffer);
        String s = new String(buffer);
        System.out.println(s);

结果:
在这里插入图片描述

        OutputStream outputStream = new FileOutputStream(file, true);//可追加数据
        outputStream.write(97);
        outputStream.write("\r\n".getBytes());
        outputStream.write(97);
        outputStream.write("\r\n".getBytes());
        outputStream.write(97);
        outputStream.close(); // 刷新并关闭

结果:
多了三个a

        byte[] bytes1 = "abc阿斯顿".getBytes();
        outputStream.write(bytes1);
        outputStream.close(); // 刷新并关闭

结果:
在这里插入图片描述

文件拷贝

        InputStream inputStream = new FileInputStream(
                "D:\\One Drive\\OneDrive\\桌面\\图片get\\OIP-C (1).jpg");//得到想要拷贝的文件的路径
        OutputStream outputStream = new FileOutputStream(
                "D:\\OIP-C (1).jpg");//选择想要拷贝的位置
        // 比如说 2049
        byte[] buffer = new byte[16459];//查看待拷贝文件的大小,定义一个数组来接收
        int len;
        while ((len = inputStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, len);//把指定长度的数组写出去
        }
        System.out.println("close");
        inputStream.close();
        outputStream.close();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小熊佩萁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值