千家信息网

Java中File类和IO流的示例分析

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要为大家展示了"Java中File类和IO流的示例分析",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Java中File类和IO流的示例分析"这篇
千家信息网最后更新 2026年11月02日Java中File类和IO流的示例分析

这篇文章主要为大家展示了"Java中File类和IO流的示例分析",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Java中File类和IO流的示例分析"这篇文章吧。

    IO流:

    IO流概述:

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

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

    IO流体系图:

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

    File类:

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

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

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

    使用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,代表创建失败。

    使用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

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

    先介绍四个常用的流:

    • 字节输入流:InputStream

    • 字节输出流:OutputStream

    • 字符输入流:Reader

    • 字符输出流:Writer

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

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

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

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

    所以我们知道计算机读取数据是一个一个的读取,当文件里面是数字或者英文的时候,因为都占了一个字节,所以可以正常读取出来。
    那么如果是汉字呢?最少也占了两个字节,如果把一个汉字拆分读取,显示出来肯定是有问题的。

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

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

    字节输出流:

    我们使用字节输出流给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();        }    }}

    运行后:

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

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

    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();            }        }    }}

    输出的结果是:

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

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

    字符输出流:

    我们使用字符输出流给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();        }    }}

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

    字符输入流:

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

    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();            }        }    }

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

    字节流和字符流总结:

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

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

    以上是"Java中File类和IO流的示例分析"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

    文件 字节 字符 输出 输入 数据 信息 对象 中文 汉字 内容 目录 英文 传输 功能 示例 分析 两个 数据传输 方法 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网高科技 互联网 卓越科技 撒么互联网科技公司 金融科技和互联网金融 老年人脱离互联网科技的作文 科技与互联网的利与弊 须眉科技是互联网公司吗 创业天下互联网科技有限公司 湖南诚度互联网科技有限公司 华夏互联网科技业 湖南一路畅行互联网科技 移动互联网年度科技创新 科技赋能视角下互联网保险发展 互联网时代的科技公司 合肥互联网科技公司公章图片 怎样加入科技互联网 广东工业互联网大赛深圳学泰科技 启辰互联网科技 工业互联网科技创业 银川新华互联网科技学校是国营吗 百单网互联网科技有限公司 科技创新与互联网经济 苏州互联网科技贷款公司 互联网科技教育视频 中化能源互联网科技招聘 乌鲁木齐新华智原互联网科技学校 互联网在线教育科技创业 江苏苏星互联网科技有限公司 互联网科技包装股份有限公司上市 互联网的科技体现在哪里
    0