Java 文件流操作.,互联网 面试官 如何面试

[史上最全] 文件处理工具类 java版 处理文件流, 文件目录递归等 一个公共的文件处理类, 包含大大小小50多个方法, 不用自己处理连接池问题,不用自己关闭文件流, 非常方便, 我一直都用这个类 立即下载


写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家。扫码加微信好友进【程序员面试学习交流群】,免费领取。也欢迎各位一起在群里探讨技术。

 

一、概念

 

在Java中,文件的输入和输出是通过流(Stream)来实现的。一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是 Internet 上的某个 URL。对于流而言,我们不用关心数据是如何传输的,只需要向源端输入数据,从目的端获取数据即可。

流按照处理数据的单位,可以分为字节流和字符流。字节流的处理单位是字节,通常用来处理二进制文件,例如音乐、图片文件等。而字符流的处理单位是字符,因为Java采用Unicode编码,Java字符流处理的即为Unicode字符,所以在操作汉字、国际化等方面,字符流具有优势。

二、字节流

所有的字节流类都继承自InputStream 和 OutputStream 这两个抽象类,下面列举了5个输入字节流类,输出字节流类和输入字节流类存在对应关系,这个就不一一列举了。




  •  
  • FileInputStream:把一个文件作为输入源,从本地文件系统中读取数据字节,实现对文件的读取操作。


     
  • ByteArrayInputStream:把内存中的一个缓冲区作为输入源,从内存数组中读取数据字节。


     
  • ObjectInputStream:对以前使用过ObjectOuputStream写入的基本数据和对象进行反序列化,用于恢复那些以前序列化的对象,注意这个对象所属的类必须实现Serializable接口。


     
  • PipeInputStream:实现了管道的概念,从线程通道中读取线程字节。主要在线程中使用,用于两个线程间通信。


     
  • SequenceInputStream:表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。


     
  • System.in:从用户控制台读取数据字节,在System类中,in是 InputStream 类的静态导入。


     

 

    public static void main(String[] args) {

        InputStream in = null;

        OutputStream out = null;

        try {

            //得到输入流

            in = new FileInputStream("E:\test\a.txt");

            //得到输出流

            File file = new File("E:\test\b.txt");

            if (!file.exists()) {

                file.createNewFile();

            }

            out = new FileOutputStream(file, true);

            int i;//从输入流读取一定数量的字节,返回 0 到 255 范围内的 int 型字节值

            while ((i = in.read()) != -1) {

                out.write(i);

            }

        } catch (FileNotFoundException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();

        } finally {

            try {

                if (in != null) {

                    in.close();

                }

                if (out != null) {

                    out.close();

                }

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

    }

 

三、字符流

所有的字符流类都继承自Reader 和 Writer 这两个抽象类,其中Reader是用于读取字符流的抽象类,Writer是用于写入字符流的抽象类。

Reader 和 Writer 要解决的最主要问题是国际化。原先的 I/O 类库只支持8位的字节流,因此不能很好的处理16位的Unicode字符。Unicode 是国际化的字符集,这样增加了Reader 和 Writer之后,就可以自动在本地字符集和Unicode国际化字符集之间进行转换。




  •  
  • FileReader:与FileInputStream对应,从文件系统中读取字符序列。


     
  • CharArrayReader:与ByteArrayInputStream 对应,从字符数组中读取数据。


     
  • PipedReader:与PipedInputStream 对应,从线程管道中读取字符序列。


     
  • StringReader:从字符串中读取字符序列。


     

 

    /**

     * 由于是字符,存在编码不一致导致乱码的问题

     * @param args

     */

    public static void main(String[] args) {

        Reader reader = null;

        Writer writer = null;

        try {

            //得到输入流

            reader = new FileReader("E:\test\a.txt");

            //得到输出流

            writer = new FileWriter("E:\test\c.txt", true);

            char[] chars = new char[50];

            int i;

            while ((i = reader.read(chars)) != -1) {

                writer.write(chars, 0, i);

                writer.flush();

            }

        } catch (FileNotFoundException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();

        } finally {

            try {

                if (reader != null) {

                    reader.close();

                }

                if (writer != null) {

                    writer.close();

                }

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

    }

 

四、缓冲流

前面介绍的字节流、字符流都是无缓冲的输入、输出流,这就意味着,每一次的读、写操作都会交给操作系统来处理。这样的做法可能会对系统的性能造成很大的影响,因为每一次操作都可能引起磁盘硬件的读、写或网络的访问。因此,对于字节流和字符流,一般不直接使用。

缓存流是一种装饰器类,目的是让原字节流、字符流 新增缓冲的功能。以字符缓冲流为例进行说明,字符缓冲流从字符流中读取、写入字符,不立刻要求系统进行处理,而是缓冲部分字符,从而实现按规定字符数、按行等方式高效ed读取或写入。

字节缓冲流:

 

    public static void main(String[] args) {

        BufferedInputStream in = null;

        BufferedOutputStream out = null;

        try {

            in = new BufferedInputStream(new FileInputStream("E:\test\a.txt"));

            out = new BufferedOutputStream(new FileOutputStream("E:\test\e.txt", true));

            byte[] b = new byte[1024];

            int i;

            while ((i = in.read(b)) != -1) {

                out.write(b, 0, i);

                out.flush();//手动刷新该流的缓冲,立即将他们写入预期目标

            }

        } catch (FileNotFoundException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();

        } finally {

            try {

                if (in != null) {

                    in.close();

                }

                if (out != null) {

                    out.close();

                }

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

    }

 

字符缓冲流:

 

    public static void main(String[] args) {

        BufferedReader bufferedReader = null;

        BufferedWriter bufferedWriter = null;

        try {

            //设置文件编码,解决文件乱码问题

            //将字节流转换为字符流,实际上使用了一种设计模式——适配器模式

            InputStreamReader isr = new InputStreamReader(new FileInputStream("E:\test\a.txt"), "GBK");

            bufferedReader = new BufferedReader(isr);

            bufferedWriter = new BufferedWriter(new FileWriter("E:\test\d.txt"));

            String s;

            while ((s = bufferedReader.readLine()) != null) {

                bufferedWriter.write(s);

                bufferedWriter.newLine();//按行读取,写入一个分行符,否则所有内容都在一行显示

            }

        } catch (FileNotFoundException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();

        } finally {

            try {

                if (bufferedReader != null) {

                    bufferedReader.close();

                }

                if (bufferedWriter != null) {

                    bufferedWriter.close();

                }

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

    }

 

 


转载:https://www.cnblogs.com/jmcui/p/9096536.html

推荐内容:
Java基础面试题,JavaWeb面试题
Java面试问题汇总[转载]
一个两年Java的面试总结
2年Java开发工作经验面试总结
java中equals,hashcode和==的区别
JAVA面试题(8)
面试必问!Java 多线程中两个线程交替执行,一个输出偶数,一个输出奇数
Java高级工程师面试题总结及参考答案
java面试总结
Java 面试知识点解析(五)——网络协议篇

 

QT 实现QStackedWidget切换页面右移动画 首先截取当前界面的图片,渲染到一个QLabel上,然后设置QPropertyAnimation动画,动画的作用对象就是这个QLabel,不断的改变geometry;当动画结束的时候,隐藏并释放这个QLabel。以下是一个QStackedWidget,放了两个QPushButton在上面,点击切换不同的界面。为了方便查看动画特效,设置了每个界面的背景图片。 阅读详情

相关推荐

数字IC时序约束实战:深入解析clock_uncertainty的设置策略与后端影响

本文深入探讨数字IC设计中clock_uncertainty的设置策略及其对后端实现的影响。通过分析时钟不确定度的组成(包括clock_skew、clock_jitter和margin),并结合实际项目经验,详细介绍了在不同设计阶段(综合、布局布线、签核)的动态调整方法。文章还提供了工程化处理参数来源、跨时钟域特殊处理以及优化时序收敛的实用技巧,帮助工程师提升数字IC设计的可靠性和性能。

weixin_29284657的博客 229

Java 文件流操作.

一、概念 在Java中,文件的输入和输出是通过流(Stream)来实现的。一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是 Internet 上的某个 URL。对于流而言,我们不用关心数据是如何传输的,只需要向源端输入数据,从目的端获取数据即可。 流按照处理数据的单位,可以分为字节流和字符流。字节流的...

weixin_34126215的博客 260

保姆级教程:用QSTEM和DrProbe搞定你的第一张STEM模拟图(附Fe3O4实例文件)

本文提供了一份详细的STEM模拟图像生成教程,涵盖从晶体结构获取到最终图像模拟的全过程。通过QSTEM和DrProbe软件的操作指南,帮助材料科学研究者快速掌握STEM模拟技术,特别适合初学者。教程包含Fe3O4实例文件,详细解析参数设置、计算优化和结果分析等关键步骤。

weixin_33730836的博客 523

java文件流操作

if(filearr.length >= 30){ //如果日志文件的个数达到30个,就将最早的那个文件删除。以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。,该文件描述符表示到文件系统中某个实际文件的现有连接。以字符为单位读取文件,常用于读文本,数字等类型的文件。使用在二进制文件上,比如应用程序,图片,媒体文件等,类的层次,继承关系,这里主要介绍文件的读写,即子类。数据源是文件,程序从文件里要数据,应该用输入流。以行为单位读取文件,常用于读面向行的格式化文件。

sun13212715744的博客 5033

Windows如何使用Anaconda 3进行keras环境的配置

** Windows如何使用Anaconda 3进行keras环境的配置 搭建Keras环境* Anaconda3如何安装keras,主要包括下面三步: 1.安装mingw libpython 2.安装theano 3.安装keras 若你还没有按装anaconda,赶紧下载安装吧! 下载途径有两个 (1)Anaconda版本为Anaconda 4.4.0,对应的python版本为3.6,附上An...

Lance_liangliang的博客 1601

3DGS实战避坑指南:从零搭建到成功训练

本文详细介绍了3D Gaussian Splatting(3DGS)从环境配置到成功训练的实战避坑指南。涵盖git clone的正确使用、依赖安装的隐藏陷阱、CUDA版本兼容性解决方案、首次训练验证、常见报错急救方案、性能优化技巧及可视化调试方法,帮助开发者高效搭建和训练3DGS模型。

weixin_29053383的博客 365

Java 文件操作

简单介绍Java中文件I/O的输入输出。

Naion的博客 2482

Steam游戏服务器攻防全景解读——如何构建游戏级抗DDoS防御体系?

当检测到TCP/UDP混合攻击时,应触发预设的熔断策略:优先保障游戏大厅服务的UDP 27015端口,临时限制匹配系统的TCP连接数。针对Steam游戏服务器特有的UDP 4380端口,需配置协议合规性检查规则:限制数据包长度不超过128字节,强制校验请求来源IP的真实性。Steam游戏服务器的防护需要平衡安全性与玩家体验,通过协议深度解析、智能流量调度和服务端加固的三维防御体系,可构建游戏行业专属的抗DDoS护城河。答:采用弹性防护方案,基础防护带宽保持50Gbps,遭遇攻击时自动扩展至T级清洗能力。

2501_91486804的博客 1455

Java文件操作与流处理

在计算机中,文件是用于存储数据的基本单位。它可以包含文本、图像、音频、视频或其他类型的数据。文件可以用于保存程序代码、用户数据、操作系统配置等内容。每个文件都有一个唯一的名称,通过这个名称可以在计算机系统中找到和访问文件。

qq_61635026的博客 1756

Open3D 体素下采样【2026最新版】

体素滤波,博客长期更新,本文最近更新时间为:2026年4月11日。

点云侠的博客 37万+

FPGA面试题目笔记(一)——FPGA开发流程、亚稳态和竞争冒险、建立保持时间、异步FIFO深度等

同步异步电路、同步异步复位、时钟偏移和抖动、最小工作周期计算、触发器锁存器

H19981118的博客 1万+

Java文件流技术:从流式编程到文件IO操作完全指南

Java文件流技术是Java编程中必不可少的一部分,它可以让我们更加方便的读取和写入文件内容。本文介绍了Java文件流技术的基本概念、不同类型的文件流以及文件流的应用和优缺点。在使用Java文件流技术时,我们需要注意CPU的使用和IO性能问题,以便更好的实现Java程序的效率。在Java中,文件流是Java IO库的一部分,用于处理文件输入输出。字符流用于处理字符数据,是Java文件IO中比较高级的操作。文件流技术是Java编程中十分重要的一部分,可以让程序读取、写入和操作文件,如文本文件、二进制文件等。

canshanyin的博客 1072

基于深度学习的工业零件缺陷检测系统

工业零件缺陷检测系统摘要 本文介绍了一个基于深度学习的工业零件缺陷检测系统解决方案。该系统采用Faster R-CNN目标检测算法,结合PyTorch框架和OpenCV图像处理库,实现了对工业零件表面缺陷(如裂纹、划痕、凹坑等)的自动检测与定位。系统包含完整的开发流程:从数据采集与标注、数据增强预处理、模型构建与训练,到最终的评估与部署。相比传统机器视觉方法,该深度学习方案具有更强的特征表示能力和环境适应性,能够有效提升工业质检的准确率和效率。文章详细阐述了系统架构设计、实现细节和优化策略,并提供了完整的代

huanghm88的专栏 286

java后台怎么返回blob格式的文件流

简介:大家好,我是程序员枫哥,🌟一线互联网的IT民工、📝资深面试官、🌹Java跳槽网创始人。拥有多年一线研发经验,曾就职过科大讯飞、美团网、平安等公司。在上海有自己小伙伴组建的副业团队,目前业余时间专注Java技术分享,春招/秋招/社招/跳槽,一对一学习辅助,项目接活开发。🌈更多学习内容, 欢迎👏关注👀【文末】微信公众号:IT枫斗者🌟🌟程序员找工作,就上Java跳槽网:www.javatiaocao.com。

IT枫斗者的博客 2935

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

《互联网大厂Java求职者面试大揭秘:核心知识深度考察》

通过try、catch、finally块来捕获和处理异常,try块里放可能会抛出异常的代码,catch块捕获异常并处理,finally块不管有没有异常都会执行。:接口里的方法都是抽象的,不能有实现,而且一个类可以实现多个接口;:多态可以提高代码的可扩展性和可维护性,比如不同的子类对象可以用父类类型来引用,调用同一个方法时会根据实际对象类型执行不同的操作。:这个嘛,得根据任务的类型和数量等综合考虑,比如核心线程数、最大线程数、队列容量等。:可以复用线程,提高响应速度,降低资源消耗。

hjc_1732的博客 681

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

极限5分钟:P7面试官与应届生的JVM对决

终面倒计时5分钟,面试官抛出生产环境FullGC告警日志,应届生面临JVM调优与问题排查的极限挑战。手撕OOM根因,用Arthas在线诊断生产问题,与P7面试官展开技术对决。

Ared 534

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

高并发压测第3小时:C++老兵手撕红黑树,面试官质疑CAP定理实现

在高并发系统压测的紧要关头,C++转行Java的资深老兵在面试中被要求手撕红黑树。面对面试官质疑CAP定理的底层实现,他如何在白板上推导证明,并最终化解危机,赢得考官的认可?

Ared 616

Java最全Java字节流和字符流,是时候总结一下IO流了,java模拟面试视频

分享一套我整理的面试干货,这份文档结合了我多年的面试官经验,站在面试官的角度来告诉你,面试官提的那些问题他最想听到你给他的回答是什么,分享出来帮助那些对前途感到迷茫的朋友。

2401_84690353的博客 933

Android面试一百问,浅入深出地轻拍面试官的脸颊,敲一敲他的木鱼脑袋。(长文警告,建议收藏(1)

简历首选内推方式,速度快,效率高啊!然后可以在拉钩,boss,脉脉,大街上看看。简历上写道熟悉什么技术就一定要去熟悉它,不然被问到不会很尴尬!做过什么项目,即使项目体量不大,但也一定要熟悉实现原理!不是你负责的部分,也可以看看同事是怎么实现的,换你来做你会怎么做?做过什么,会什么是广度问题,取决于项目内容。但做过什么,达到怎样一个境界,这是深度问题,和个人学习能力和解决问题的态度有关了。大公司看深度,小公司看广度。大公司面试你会的,小公司面试他们用到的你会不会,也就是岗位匹配度。面试过程一定要有礼貌!

2401_84562529的博客 418

2024年java IO流详细总结(二、字符输入输出流,File文件操作类)(1),2024大厂Java面试最火问题

从命令行中读入一个文件名,判断该文件是否存在,如果该文件存在,则在原文件相同路径下创建一个文件名为“copy_原文件名”的新文件,该文件内容为原文件的拷贝。例如读入一个“file/girl.jpg”的文件,则创建一个“file/copy_girl.jpg”,新文件和源文件内容相同。/**@author 超伟@date 2019年5月17日@博客: https://blog.csdn.net/MacWx*//***/

2401_84003839的博客 1059

新年迈出Java后台服务器与数据库交互第一步&2024最新通用Java8&jdbc8连接mysql8数据库进行增删改查等基本操作详解(IDEA),jar包导入,图片等文件流,批量操作

谈到面试,其实说白了就是刷题刷题刷题,天天作死的刷。。。。。为了准备这个“金三银四”的春招,狂刷一个月的题,狂补超多的漏洞知识,像这次美团面试问的算法、数据库、Redis、设计模式等这些题目都是我刷到过的并且我也将自己刷的题全部整理成了PDF或者Word文档(含详细答案解析)66个Java面试知识点架构专题(MySQL,Java,Redis,线程,并发,设计模式,Nginx,Linux,框架,微服务等)+大厂面试题详解(百度,阿里,腾讯,华为,迅雷,网易,中兴,北京中软等)算法刷题(PDF)本文已被。

2401_84585339的博客 1000

互联网大厂Java求职面试故事与技术全面解析

场景描述: 谢飞机是一位刚从培训班毕业的“水货程序员”,今天他怀着忐忑的心情来到一家互联网大厂接受Java开发岗的面试。面试官是大厂里的资深专家李老师,对技术精益求精,问题循序渐进。以下是他们的对话记录:李老师:谢飞机,听说你学了Java,那你能不能简单说一说JVM的内存模型以及它是如何处理垃圾回收的?顺便举个具体例子,比如Spring Boot项目中如何优化GC(垃圾回收)呢?**谢飞机(自信满满):**JVM内存模型啊!就是分成...呃,堆内存和方法区,还有什么栈、程序计数器,这些东西。嗯,垃圾回收就是

weixin_46960243的博客 683

互联网大厂Java面试:从Spring Boot到微服务架构的实战问答

超好吃,你的基础知识扎实,回答得也很有条理。我们会认真评估你的表现,回去等我们的通知吧!

weixin_54138735的博客 283

Java面试场景:深入探讨Spring源码解析与微服务架构

本场面试围绕Spring源码解析和微服务架构展开,候选人展现了扎实的技术功底和丰富的实战经验。面试官对候选人的回答非常满意,认为其具备解决复杂问题的能力和架构设计思维。希望本文能为Java开发者提供面试参考和技术启发。

南客先生的博客 960

前端微信支付面试题,Java开发拿着30K的高薪,全靠这份Java知识点PDF大全

在这个部分总结了2019年到目前为止Java常见面试问题,取其面试核心编写成这份文档笔记,从中分析面试官的心理,摸清面试官的“套路”,可以说搞定90%以上的Java中高级面试没一点难度。本节总结的内容涵盖了:消息队列、Redis缓存、分库分表、读写分离、设计高并发系统、分布式系统、高可用系统、SpringCloud微服务架构等一系列互联网主流高级技术的知识点。(上述只是一个整体目录大纲,每个点里面都有如下所示的详细内容,从面试问题——分析面试官心理——剖析面试题——完美解答的一个过程)

2301_81694225的博客 700

Java全栈工程师面试实录:从基础到微服务的深度解析

在整个面试过程中,应聘者展示了扎实的Java全栈技能,涵盖前后端开发、微服务架构、数据库操作、测试与安全等多个方面。他不仅能够清晰地回答技术问题,还能结合实际项目经验,给出具体的代码示例。对于一些较复杂的问题,他也表现出一定的思考能力,尽管偶尔会尝试用专业术语掩饰知识盲点,但整体表现非常出色。如果你正在准备Java全栈工程师的面试,建议多练习代码编写,尤其是常见的框架和工具的使用。同时,注重对底层原理的理解,比如JVM、Spring Boot、微服务等,这样在面试中才能更有底气。

CatchLight的博客 992
上一篇: Java文件上传细讲,大厂 HR 如何面试
下一篇: C++与Java语法上的不同,互联网 面试官 如何面试
agoodcoder777
博客等级 码龄8年 24粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值