首页 > 作文

一起来了解Java的File类和IO流

更新时间:2023-04-06 03:42:09 阅读: 评论:0

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,如果存在了就返回fal        system.out.println(file1.createnewfile());   }        

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

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

file file2 = new file("g://a");system.out.println(file2.mkdir());   //创建一个目录,如果没有存在则新建一个,并且返回true,如果存在了就返回fal

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

file file3 = new file("g://a//b//c");        system.out.println(file3.mkdirs());   //创建多级目录,如果没有存在则新建一个,并且返回true,如果存在了就返回fal

接着我们需要使用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.clo();            } 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.clo(); //关闭资源        } 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.clo();            } catch (ioexception e) {                e.printstacktrace();            }        }    }

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

字节流和字符流总结:

io是文件的输入和输出,我们要想去对文件或者写,或者通过程序发送消息给另外的用户都要用到流。io流分 字节流和字符流,字节流是以字节为单位io,字符流是以字符为单位io;通常读写图片、视频音频等用字节 流,如果读写文件的内容比如中文建议用字符流。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注www.887551.com的更多内容!

本文发布于:2023-04-06 03:42:08,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/f28f0383542b07ed1799023badf74cfe.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:一起来了解Java的File类和IO流.doc

本文 PDF 下载地址:一起来了解Java的File类和IO流.pdf

标签:字节   文件   字符   汉字
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图