看似简单的IO流也是面试官的拿手菜哦

📜个人介绍


大家好我是:一颗松
认真分享技术,记录学习点滴
一起学习赢战offer🍺

点赞:👍 留言:✍收藏:⭐️

个人格言: 想法落实的最佳时机就是现在!🏄


IO流思维导图

IO知识点多且复杂,对于后期项目优化有重要作用,弄懂IO流是十分必要的

🗂️1 文件

1.1 什么是文件❓

生 活 中:通常指纸质材料,或者官方通知
计算机中: 文件指一个保存数据的空间;比如音频文件、图片文件、视频文件、文本文件这些统称文件。

1.2 什么是文件流❓如何理解流的概念❓

💡答: 在程序中文件是以流的形式来操作的;
流:指文件与程序(内存)之间的经历路径
输入流:数据从外部存储设备到程序(内存)的路径(只能读)
输出流:数据从程序(内存)到外部存储设备的路径(只能写)
输入输出是针对程序本身而言的,指向程序则为输入流,指向文件则为输出流


1.3 流的作用💡

作用1:程序读取文件中的数据
作用2:程序把数据写到文件中

📝2 文件操作

👀2.1 快速了解java File类

在java中提供了文件操作API,我们可以通File类创建对象进而操作文件

  • 拿到File类我们发现它在 java.io包下,不在java.lang包下使用时需要导包
  • File常用的构造方法如下表:
构造器 说明
File(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例。
File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
File(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 File实例。
  • 看成员方法;
方法名 说明
String getName() 返回此文件或目录的名称。

🆕2.2 创建文件

🌰案例1---用代码创建文件

public static void main(String[] args) throws IOException {
        System.out.println("-------------方式1-------------------");
//        String filePath = "E:\\aba\\test01.txt";
//        creat02(filePath);
        System.out.println("---------------方式2-----------------");
//        String fileName = "test02.txt";
//        creat01(fileName);
        System.out.println("----------------方式3----------------");
//        String parentName = "E:\\aba\\";
//        String fileNaem = "test03.txt";
//        creat03(parentName,fileNaem);
}
//具体方法实现        
 //第一种方式 File(File parent, String child) 创建文件对象
    public static void creat01(String fileName){
        File parentFile = new File("E:\\aba\\");
        File file = new File(parentFile,fileName);
        try {
            file.createNewFile();
            System.out.println("方式1创建成功");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //第二种方式 File(String pathname) 创建文件对象
    private static void creat02(String filePath) {
        File file = new File(filePath);
        try {
            file.createNewFile();
            System.out.println("方式2创建成功");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
    //第三种方式 File(String parent, String child) 创建文件对象
    private static void creat03(String parentName, String fileNaem) {
        File file = new File(parentName,fileNaem);
        try {
            file.createNewFile();
            System.out.println("第3种方式创建成功");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

🔍2.3 获取文件相关信息
步骤解析

第一步:创建文件对象
第二步:调用成员方法

🌰案例2--- 获取当前文件对象的文件名

File file = new File("E:\\aba\\testaaa.txt");    //创建文件对象
file.createNewFile();                             //创建文件
System.out.println("获取文件名:"+file.getName()); //用对象调用成员方法,并输出方法名
System.out.println("获取文件绝对路径:"+file.getAbsolutePath());
System.out.println("获取文件父级目录:"+file.getParent());
System.out.println("获取文件大小(字节):"+file.length());
System.out.println("判断文件是否存在:"+file.exists());
System.out.println("判断是否是一个文件:"+file.isFile());

🗑️2.4 目录操作和文件删除

注意:【目录也是一种特殊形式存在的文件】

  • mkdir创建一级目录\mkdirs创建多级目录\delete删除空目录或者文件

🌰案例3--- 判断E盘aba目录下是否存在testaaa.txt,如果存在删掉

 String filepath = "E:\\aba\\testaaa.txt";    //定义好文件路径
        File file1 = new File(filepath);             //创建文件对象
        if (file1.exists()){                         //判断文件是否存在,再接着往下做
            if (file1.delete()){
                System.out.println(filepath+"删除成功!");
            }else {
                System.out.println(filepath+"删除失败!");
            }
        }else {
            System.out.println("文件不存在!");
        }

🌰案例4---判断e盘下atest目录是否存在,如果存在删除

String documentpath = "E:\\atest";    //定义好文件路径
        File file2 = new File(documentpath);             //创建文件对象
        if (file2.exists()){                         //判断文件是否存在,再接着往下做
            if (file2.delete()){
                System.out.println(documentpath+"删除成功!");
            }else {
                System.out.println(documentpath+"删除失败!");
            }
        }else {
            System.out.println("目录不存在!");
        }

📊3 javaIO流原理及分类

3.1 InputStream的常见子类

子类 说明
FileInputStream 文件字节流输入流
BufferedInputStreanm 缓冲输入流
ObjectInputStream 对象输入流

🌰案例5---FileInputStream读取文件数据

①int read() 从此输入流中读取一个字节的数据。当内容读取结束返回 -1;

    //读取E盘下aba目录下test03.txt文件内容
        String str = "E:\\aba\\test03.txt";            
        FileInputStream fileInputStream = new FileInputStream(str);
        int count =0;
        while ((count=fileInputStream.read()) != -1){
            System.out.print((char) count);
        }
        fileInputStream.close();

②int read(byte[] b) 从此输入流 b.length最多 b.length字节的数据读 b.length字节数组。最终读取结束后也会返回-1

 String str = "E:\\aba\\test03.txt";
        byte ch [] = new byte[8];
        int cout = 0;
        FileInputStream fileInputStream = new FileInputStream(str);
        while ((cout = fileInputStream.read(ch)) !=-1){
            String st = new String(ch,0,cout);
            System.out.print(st);
        }
        fileInputStream.close();

3.2 OutputStream的常见子类

  • FileOutputStream | 文件字节流输出流

🌰案例6--- 写入文件案例

 String filePath = "E:\\aba\\write.txt";            //定义写入路径
 FileOutputStream fileOutputStream = new FileOutputStream(filePath);  //创建文件输出流对象
 fileOutputStream.write("hello,word".getBytes());   //通过write方法写入文件

注意:【此处创建对象时,在文件路径后加true,则写入数据追加在文件原内容之后,不加true这每次执行都会新写】

结语

大佬请留步既然看到这了不如点个赞👍再走吧

本文目的在于分享技术以及在学习过程中个人记得需要注意的点,记录学习过程;
如果出现错误欢迎大家指正,如有意见或建议欢迎在评论区讨论

#Java学习##Java#
全部评论
感谢楼主分享,通过案例分享,简单易懂
1 回复 分享
发布于 2022-05-20 10:40

相关推荐

04-11 00:51
已编辑
门头沟学院 Java
先说一下楼主的情况:双非本大三,两段实习,javaer,想要找一个暑期大厂offer,努力了两个月,三月份每天的状态就是算法,八股,项目,四月份更是一个面试没有,最终还是没有结果,心碎了一地。期间面了一些中小厂,大厂只有腾讯约面,其他大厂都投了一遍,但是还是石沉大海。再看一下楼主的面试结果吧,就不说ttl了腾讯s3:三面挂csig:一面挂teg:三面挂wxg:一面挂没错,面了八次腾讯,两次三面挂,当时真的心都碎了。其他中小厂都有面,有的没过,有的oc,但是都没有去。其他大厂投了简历,但是不是简历挂,就是测评挂,都说今年行情好很多,各大厂都扩招,可是问题出在那里呢?学历背景吗?实习经历吗?还是简历不够好看?依稀记得,从年初七就离开了家里,回到学校,早早准备面试,当时自己认为凭借着自己的两段实习经历,以及大二就开始准备的八股算法,拿大厂offer不是问题,但是还是不敢放松,回校的状态每天就是算法,八股,还有查看各种招聘信息,想着尽早投机会多,但是事实证明,投的早,不如投的刚刚好。当时想着,先投一些中小厂开始面试,找找面试感觉,从2.10就开始有面试了,基本都是线下面试,面试的感觉都很不错,觉得自己的状态慢慢回来了,期间也有oc一些中小厂,但是自己的目标并不在此,只是想练一下手,遂拒。后面投了腾讯的暑期实习基地,不久就约面了,第一次面这么大的厂,多少有点紧张,好在运气还不错,遇到的面试官也比较好,一直干到了三面,期间看牛客有不少说一面就挂了的,感觉自己还是比较幸运的,但是没想到倒在了三面,一周后就挂了,伤心是有的,但是想到这才刚刚开始,还有很多机会,便继续准备下一次面试了,很快,被另外一个部门捞了,一进会议,面试官没开摄像头,看网上说没开摄像头很多都是kpi,但是自己给自己打气,认为面试官只是不方便开摄像头罢了,面完,感觉良好,没问什么很难得问题,基本都答出来了,算法两道也a了一道,感觉实习不会这么严格吧?还是过了一会挂了,因为这个?还是技术不太匹配?面试过程中说搞C++的,心想,搞c++的你面我干啥?唉,这时候有点气馁,然后就接下来半个月没有面试。这时已经是三月底了,看到牛客好多人都已经陆陆续续拿到了offer,看人家的面试准备也没那么早,有0实习的,有没刷算法的,有两个面的,,,唉,反正是一言难尽啊,感觉努力没有什么意义,面试多半是看面试官的感觉,主观性很大啊,只要你技术没有太大的问题。第三次面试腾讯,面试来的比较突然,期间已经有几天没看八股什么的了,临时看了一下之前自己做的面试笔记,但是面试却异常顺利,三天闯到了三面,自己也不敢相信,三面玩感觉也良好,脑子里不得不想着一些“offer结算画面”,但是过了一会查看流程显示“流程终止”,我?哎,当时真的有苦说不出啊,也是一晚没睡。后面就逐渐开始褪去大厂梦了,看着曾经跟自己交流的牛油,朋友,认识的人,觉得他们技术不太如你,算法刷的没你多,进了大厂,但是这又如何呢?能力强不强不是你了说了,面试官说了算。也逐渐知道,不是你能力好就可以了,还得有运气,运气,运气。这个过程太累了,和自己和解吧,不用非得大厂,找个合适一点的就好,放轻松一点。今天有点心事睡不着,闲着想写一些自己的面试过程,勿喷。附上一张面试的情况,公司就不方便透露了。
怒卷的斯科特:八分运气两分实力
点赞 评论 收藏
分享
评论
1
7
分享

创作者周榜

更多
牛客网
牛客企业服务