Java中File类和IO流的示例分析(file类,io流,java,开发技术)

时间:2024-05-02 17:08:39 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    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()创建一个文件:

    publicclasstest01{publicstaticvoidmain(String[]args)throwsIOException{ //先建立一个File对象,并传入路径Filefile1=newFile("G://abc.txt");//创建空文件,如果没有存在则新建一个,并且返回True,如果存在了就返回falseSystem.out.println(file1.createNewFile());}

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

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

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

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

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

    Filefile3=newFile("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文件里面写一句话:

    publicclasstest01{publicstaticvoidmain(String[]args){try{//创建输出流对象:OutputStreamfos=null;fos=newFileOutputStream("G://abc.txt");Stringstr="今天的博客是IO流";//先将需要写入的字符打散成数组:byte[]words=str.getBytes();//使用写入的功能fos.write(words);}catch(FileNotFoundExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}}

    运行后:

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

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

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

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

    输出的结果是:

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

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

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

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

    字符输出流:

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

    publicclasstest03{publicstaticvoidmain(String[]args){try{//使用字符输出流的FileWriter写入数据Writerfw=newFileWriter("G://abc.txt");fw.write("我们在学Java");fw.write("一起加油");fw.close();//关闭资源}catch(IOExceptione){e.printStackTrace();}}}

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

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

    字符输入流:

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

    publicclasstest04{publicstaticvoidmain(String[]args)throwsIOException{//创建字符输入流对象:Readerfr=null;try{fr=newFileReader("G:/abc.txt");//借助字符流对象创建了字符缓存区把字符一个一个的取到后先放到缓存区//然后一起再读写到程序内存来,效率更高BufferedReaderbr=newBufferedReader(fr);//先去缓存区一行一行的读取Stringline=br.readLine();while(line!=null){System.out.println(line);line=br.readLine();}}catch(FileNotFoundExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}finally{try{fr.close();}catch(IOExceptione){e.printStackTrace();}}}

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

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

    字节流和字符流总结:

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

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

     </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
    本文:Java中File类和IO流的示例分析的详细内容,希望对您有所帮助,信息来源于网络。
    上一篇:Python和Matlab怎么实现蚂蚁群算法求解最短路径下一篇:

    21 人围观 / 0 条评论 ↓快速评论↓

    (必须)

    (必须,保密)

    阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18