当前位置:

首页 > 编程开发 > Java的File类和IO流实例分析

Java的File类和IO流实例分析

IObit Uninstaller 15 Pro
IObit Uninstaller 15 Pro

IObit Uninstaller 是一款专为 Win 平台设计的软件卸载工具,卸载干净彻底。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。

立即下载
¥29
Windows 2026-08-22
正版软件 Windows Uninstaller 卸载清理工具

IO流:IO流概述:IO:输入/输出(Input/Output)流:是一种抽象概念,是对数据传输的总称。也就是说数据在设备间的传输称为流,流的本质是数据传输IO流就是用来处理设备间数据传输问题的,常见的应用:文件复制;文件上传;文件下载等等,总而言之,涉及到传输的,都涉及到流。IO流体系图:既然IO是涉及文件的操作,那么一定离不开文件操作的技术:File类:File类是java.io包中唯一代表磁盘文件本身的对象。File类定义了一些方法来操作文件,主要用来获取或处理与磁盘文件相关的信息,像文件名、文件路

本文目录

      IO流:

      IO流概述:

      IO:输入/输出(Input/Output)

      流:是一种抽象概念,是对数据传输的总称。也就是说数据在设备间的传输称为流,流的本质是数据传输IO流就是用来处理设备间数据传输问题的, 常见的应用:文件复制;文件上传;文件下载等等,总而言之,涉及到传输的,都涉及到流。

      IO流体系图:

      Java的File类和IO流实例分析

      Java的File类和IO流实例分析

      既然IO是涉及文件的操作,那么一定离不开文件操作的技术:

      File类:

      File 类是 java.io 包中唯一代表磁盘文件本身的对象。File 类定义了一些方法来操作文件,主要用来获取或处理与磁盘文件相关的信息,像文件名、 文件路径、访问权限和修改日期等,还可以浏览子目录层次结构。

      File 类表示处理文件和文件系统的相关信息。File 类不具有从文件读取信息和向文件写入信息的功能,它仅描述文件本身的属性。所以和IO搭配在一起进行读出和写入的操作。

      先看一张File类常用的方法总汇图:

      Java的File类和IO流实例分析

      使用createNewFile()创建一个文件:

      public class test01 {
          public static void main(String[] args) throws IOException {
      		//先建立一个File对象,并传入路径
              File file1 = new File("G://abc.txt");
              //创建空文件,如果没有存在则新建一个,并且返回True,如果存在了就返回false
              System.out.println(file1.createNewFile());   
      }

      如果执行后,该目录没有这个文件,那么会创建一个,并且返回true,如果已经存在了,就会返回false,代表创建失败。

      Java的File类和IO流实例分析

      使用mkdir()创建一个目录:

      File file2 = new File("G://a");
      	System.out.println(file2.mkdir());   
      //创建一个目录,如果没有存在则新建一个,并且返回True,如果存在了就返回false

      使用mkdirs()创建多级目录:

      File file3 = new File("G://a//b//c");
              System.out.println(file3.mkdirs());   
      //创建多级目录,如果没有存在则新建一个,并且返回True,如果存在了就返回false

      Java的File类和IO流实例分析

      接着我们需要使用IO流里面的功能对文件进行输入和输出:

      先介绍四个常用的流:

      • 字节输入流:InputStream

      • 字节输出流:OutputStream

      • 字符输入流:Reader

      • 字符输出流:Writer

      为什么会有字节和字符两种流呢?

      ASCII 码中,一个英文字母(不分大小写)为一个字节,一个中文汉字为两个字节。

      UTF-8 编码中,一个英文字为一个字节,一个中文为三个字节。

      Unicode 编码中,一个英文为一个字节,一个中文为两个字节。

      所以我们知道计算机读取数据是一个一个的读取,当文件里面是数字或者英文的时候,因为都占了一个字节,所以可以正常读取出来。

      那么如果是汉字呢?最少也占了两个字节,如果把一个汉字拆分读取,显示出来肯定是有问题的。

      小结:如果数据通过Window自带的记事本软件打开,我们还可以读懂里面的内容,就使用字符流,否则使用字节流。如果你不知道该使用哪种类型的流,就使用字节流!

      下面是四种流对应功能的方法名总汇表:

      Java的File类和IO流实例分析

      字节输出流:

      我们使用字节输出流给abc.txt文件里面写一句话:

      public class test01 {
          public static void main(String[] args) {
      
              try{
                    //创建输出流对象:
                  OutputStream fos = null;
                  fos = new FileOutputStream("G://abc.txt");
                  String str = "今天的博客是IO流";
                  //先将需要写入的字符打散成数组:
                  byte[] words = str.getBytes();
                  //使用写入的功能
                  fos.write(words);
      
              } catch (FileNotFoundException e) {
                  e.printStackTrace();
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
      }

      运行后:

      Java的File类和IO流实例分析

      字节输入流(从文件读取到控制台):

      我们知道如果文件内是汉字,使用字节输入流,那么显示的肯定是乱码,如果现在文件里面是“我爱中国”这四个字,使用下面这段代码:

      public class test02 {
          public static void main(String[] args) {
              //创建字节输入流对象:
              InputStream fis = null;
              try{
                  fis = new FileInputStream("G://abc.txt");
                  int data;
                  //fis.read()取到每一个字节通过Ascll码表转换成0-255之间的整数,没有值返回-1
                  while((data=fis.read())!=-1){
                      //(char) data 将读到的字节转成对应的字符
                      //中文的字符是2+个字节组成
                      System.out.print((char) data);
                  }
              } catch (FileNotFoundException e) {
                  e.printStackTrace();
              } catch (IOException e) {
                  e.printStackTrace();
              }finally {
                  try{
                      fis.close();
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              }
          }
      }

      输出的结果是:

      Java的File类和IO流实例分析

      然后把文件内信息换成英文和数字:

      Java的File类和IO流实例分析

      结论:有汉字的文件读取不能用字节流

      字符输出流:

      我们使用字符输出流给abc.txt文件里面写几句话:

      public class test03 {
          public static void main(String[] args) {
              try{
                  //使用字符输出流的FileWriter写入数据
                  Writer fw = new FileWriter("G://abc.txt");
                  fw.write("我们在学Java");
                  fw.write("一起加油");
                  fw.close(); //关闭资源
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
      }

      Java的File类和IO流实例分析

      也没用问题,我们发现,使用字符流写中文汉字更方便。

      字符输入流:

      可以设置缓存流提高获取值的效率:

      public class test04 {
          public static void main(String[] args) throws IOException {
              //创建字符输入流对象:
              Reader fr = null;
              try{
                  fr = new FileReader("G:/abc.txt");
                  //借助字符流对象创建了字符缓存区 把字符一个一个的取到后先放到缓存区
                  //然后一起再读写到程序内存来,效率更高
                  BufferedReader br = new BufferedReader(fr);
                  //先去缓存区一行一行的读取
                  String line = br.readLine();
                  while(line != null){
                      System.out.println(line);
                      line = br.readLine();
                  }
              } catch (FileNotFoundException e) {
                  e.printStackTrace();
              } catch (IOException e) {
                  e.printStackTrace();
              }finally {
                  try {
                      fr.close();
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              }
          }

      当文件内的信息为多行的时候:

      Java的File类和IO流实例分析

      字节流和字符流总结:

      • IO是文件的输入和输出,我们要想去对文件或者写,或者通过程序发送消息给另外的用户都要用到流。

      • IO流分 字节流和字符流,字节流是以字节为单位IO,字符流是以字符为单位IO;通常读写图片、视频音频等用字节 流,如果读写文件的内容比如中文建议用字符流。

      本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
      作者最新文章
      编程开发 Java io file
      相关文章 更多
      Java单元测试入门:使用JUnit 5编写第一个测试用例
      Java单元测试入门:使用JUnit 5编写第一个测试用例

      面向初学者的JUnit 5实用入门指南。从测试概念、Maven依赖配置,到手把手编写首个单元测试用例及断言验证,助你掌握Java单元测试的核心流程。

      Java变量未初始化报错解析:局部变量与成员变量默认值差异
      Java变量未初始化报错解析:局部变量与成员变量默认值差异

      深入解析Java中局部变量未初始化编译报错与成员变量自动赋予默认值的机制差异,涵盖JVM内存分配、编译期确定性赋值检查与实际排查修复方案。

      Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat
      Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat

      详细讲解在Java中获取当前系统时间并进行格式化输出的两种核心方案:基于Java 8全新日期时间API的DateTimeFormatter与传统遗留的SimpleDateFormat,包含完整代码示例、线程安全机制对比及生产选型建议。

      Java中final与static final常量的定义及初始化规则
      Java中final与static final常量的定义及初始化规则

      深入解析Java中final变量与static final常量的定义、内存语义、初始化时机及合法赋值路径,涵盖编译期常量优化与实战避坑指南。

      Java抽象方法与接口方法的区别及选型建议
      Java抽象方法与接口方法的区别及选型建议

      深入对比Java中抽象类抽象方法与接口方法的语法演进、设计意图及运行期差异,并提供清晰的架构选型决策流程与实战范例。

      Java实现HTTP请求与JSON解析的完整代码示例
      Java实现HTTP请求与JSON解析的完整代码示例

      本文提供Java标准库HttpClient发起HTTP GET/POST请求并结合Jackson进行JSON数据反序列化与序列化的完整代码示例与工程实践指南。

      Java递归出现StackOverflowError的原因分析及栈空间优化方案
      Java递归出现StackOverflowError的原因分析及栈空间优化方案

      详细分析Java递归调用出现StackOverflowError的原因,结合代码说明线程栈、栈帧和递归深度之间的关系,并介绍终止条件排查、迭代改写、减少栈帧开销以及通过-Xss调整JVM栈空间的方法。

      Java空指针异常(NPE)的代码排查与修复实例
      Java空指针异常(NPE)的代码排查与修复实例

      针对Java中常见的NullPointerException(NPE),本文从堆栈日志定位、典型代码触发场景、具体修复代码对比到防御体系进行系统讲解,提供实用且易上手的排查与修复方案。

      selenium上传文件教程本地文件路径设置方法
      selenium上传文件教程本地文件路径设置方法

      深入解析Selenium处理文件上传的技术细节,涵盖标准HTML控件的路径直接注入法与非标准控件的系统级模拟方案,提供Windows与Linux环境下的路径设置最佳实践及常见异常排查。

      大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景
      大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景

      针对大数据工程场景,系统对比Java、Scala与Python在执行性能、生态结合、开发效率和维护成本上的核心差异,给出清晰的架构选型依据与落地方案。

      查看更多
      精品专题 更多
      装机必备
      装机必备

      正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

      Windows
      Windows

      正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

      PDF教程
      PDF教程

      正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

      Mac软件 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      Aperty macOS版
      Aperty macOS版
      macOS

      Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

      WINDOWS 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      PixTV 网页版
      PixTV 网页版
      Windows

      PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。

      即将离开本站
      您即将前往第三方网站,请确认是否继续?