千家信息网

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

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,这篇文章主要为大家展示了"Java中File类和IO流的示例分析",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Java中File类和IO流的示例分析"这篇
千家信息网最后更新 2024年11月11日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安全错误 数据库的锁怎样保障安全 广州交易软件开发服务 网络安全法与社会保障法 深信服网络技术应聘条件 连云港品搜网络技术有限公司 ac1900能做打印服务器吗 南昌航空大学怎么登录航空数据库 阐述数据库的几种模型 ios 数据库地址 违反规定服务器被停封 冲撞服务器有空间 防沉迷网络安全黑板报 软件开发比硬件重要得多 重庆教育软件开发公司排名 网络安全法案例试题及答案 战神账号数据库启动 地图软件开发流程 如何搭建设本地服务器集群 峨边网络安全宣传周 兰州慧通网络技术有限责任公司 网络安全在心中图片 服务器划分虚拟主机 服务器缓存盘与数据盘配比 嵌入式软件开发的主要任务 南昌航空大学怎么登录航空数据库 上海智理互联网科技有限公司 支部网络安全学习心得 网络安全拓扑示意图 网络安全制度制定原则 嵌入式人工智能软件开发 儿童服务器拆解视频教程
    0