Java-IO流基础知识

这篇具有很好参考价值的文章主要介绍了Java-IO流基础知识。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.File类与路径知识

1.File类

2.Java中的路径知识

3.创建File类的实例

4.File类的方法使用

5.File类使用的注意点

2.IO流知识

1.IO流原理

2.文件的读入

3.read()的重载方法:难点

4.文件的写出

1.写出的说明

2.写出操作的具体步骤

5.文件的复制:先读出在写入

6.字节流FileInputStream和FileOutputStream的使用

7.处理流之一:缓冲流

8.处理流之二:转换流

9.标准输入输出流

10.打印流:PrintStream/PrintWriter

11.数据流:DateInputStream/DateOutputStream

12.对象流

13.RandomAccessFile的使用

14.NIO的使用

3.字符集


1.File类与路径知识

1.File类

1.File的对象可以表示一个文件或文件目录

2.要在java程序中表示一个真实存在的文件或目录,必须有一个File对象,但是java程序中的一个File对象,可能没有一个真实存在的文件或目录。

3.File类声明在java.io包下

2.Java中的路径知识

1.相对路径:相较于某个路径下指明的路径

2.绝对路径:包含盘符在内的文件路径

3.路径中的每级目录之间用一个路径分隔符隔开

4.路径分隔符和系统有关:

windows和Dos系统默认使用 \ 表示

Unix和URL使用 / 表示

5.IDEA中的路径问题

        如果开发中使用JUnit的单元测试方法,相对路径即为当前Module下。

        如果开发中使用main方法测试,相对路径即为当前的Project

3.创建File类的实例

1.File(String filePath)

2.File(String parentPath,String childPath)

3.File(File parentFile,String childPath)

File file1 = new File("hello.txt");
File file2 = new File("D:\\code\\java", "hi");
File file3 = new File(file2, "h.txt");

此时没有对应文件也不会报错,因为此时只是造了内存层面的几个对象而已。

4.File类的方法使用

1.renameTo(File dest):把文件重命名为指定的文件路径:要想返回true,必须file1在硬盘中存在,file2不能存在。

2.getAbsolutePath():获取绝对路径

5.File类使用的注意点

1.File类中涉及到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法,并未涉及到写入或读取文件内容的操作。如果需要读取或写入文件内容,必须使用IO流来完成。

2.后续File类的对象常会作为参数传递到流的构造器中,指明读取或写入的终点

3.要想删除成功,文件目录下不能有子目录或文件,

2.IO流知识

1.IO流原理

1.I/O流用于处理设备之间的数据传输;在java中,数据的输入输出操作以流(stream)的方式进行。

2.流的分类

按照数据单位不同:字节流(8 bit),字符流(16bit),一个字符a等于两个字节01

按照流向不同:输入流,输出流

按照流的角色不同:节点流(直接作用在文件上),处理流(包住节点流的流就是处理流)

3.流的体系

Java-IO流基础知识

2.文件的读入

1.实例化File类的对象,指明要操作的文件

2.提供具体的流

3.数据的读入:read();返回读入的一个字符,如果达到文件末尾,返回-1;

4.关闭流

代码示例:为突出读入文件的步骤,没有使用try-catch-finally结构,而是throws来处理异常

@Test
public void test2() throws IOException {
    //实例化File类的对象,指明要操作的文件
    File file = new File("hello.txt");
    //2.提供具体的流
    FileReader fr = new FileReader(file);
    //3.数据的读入:read();返回读入的一个字符,如果达到文件末尾,返回-1;
    char[] cbuf = new char[5];
    int len;
    while ((len = fr.read(cbuf)) != -1) {
        for (int i = 0; i < len; i++) {
            System.out.print(cbuf[i]);
        }
    }
    //4.关闭流
    fr.close();
}

5.为了保证流资源一定执行关闭操作。需要使用try-catch-finally处理

6.读入的文件一定要存在,否则会报FileFoundException。

示例代码:使用try-catch-finally处理异常

@Test
public void testFileReader(){
    FileReader fr = null;
    try {
        //1.实例化File类的对象,指明要操作的文件
        File file = new File("hello.txt");
        //2.提供具体的流
        fr = new FileReader(file);
        //3.文件的读入
        char[] cbuf = new char[5];
        int len;
        while ((len = fr.read(cbuf))!= -1){
            for (int i = 0;i < len; i++){
                System.out.println(cbuf[i]);
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (fr != null){
            //4.关闭流
            try {
                fr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
   
}

3.read()的重载方法:难点

1.read(char[] cbuf):返回每次读入cbuf数组中的个数。如果达到文件末尾,返回-1

2.读入操作的难点:while循环中的len不可血多或血少,否则都无法取得文件中的所有值

//3.数据的读入:read();返回读入的一个字符,如果达到文件末尾,返回-1;
char[] cbuf = new char[5];
int len;
while ((len = fr.read(cbuf)) != -1) {
    for (int i = 0; i < len; i++) {
        System.out.print(cbuf[i]);
    }
}

4.文件的写出

1.写出的说明

1.输出操作,对应的File可以不存在。

2.file不存在时,会自动创建文件。

3.若存在,若流使用的构造器是FileWriter(file,false),则覆盖原有文件。

                若FileWriter(file,true),则添加在原有文件后

2.写出操作的具体步骤

1.提供file的对象,指明写出到的文件

2.提供FileWriter的对象,用于数据的写出

3.写出

4.流的关闭

示例代码:两种处理异常的方式都有

@Test
    public void testFileWriter() throws Exception {
        //1.提供file的对象,指明写出到的文件
        File file = new File("hello.txt");
        //2.提供FileWriter的对象,用于数据的写出
        FileWriter fw = new FileWriter(file);
        //3.写出
        fw.write("java");
        //4.流的关闭
        fw.close();
    }
    
    @Test
    public void testFileWriterTwo(){
        FileWriter fw = null;
        try {
            //1.提供file的对象,指明写出到的文件
            File file = new File("hello.txt");
            //2.提供FileWriter的对象,用于数据的写出
            fw = new FileWriter(file);
            //3.写出
            fw.write("java");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fw != null){
                //4.流的关闭
                try {
                    fw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
       
    }

5.文件的复制:先读出在写入

1.创建File类的对象,指明读入和写出的文件

2.创建输入输出流的对象

3.数据的读入和写出

4.关闭流资源

注意:字符流只能用于文件的复制,不能用于图片的复制。图片需要字节流。

@Test
    public void test2() throws IOException {
        //1.创建File类的对象,指明读入和写出的文件
        File srcfile = new File("hello.txt");
        File destfile = new File("hello1.txt");

        //2.创建输入输出流的对象
        FileReader fr = new FileReader(srcfile);
        FileWriter fw = new FileWriter(destfile);
        
        //3.数据的读入和写出
        char[] cbuf = new char[5];
        int len;//记录每次读入到cbuf数组中的字符的个数
        while ((len = fr.read(cbuf)) != -1) {
            //每次写出len个字符
            fw.write(cbuf,0,len);
        }
        //4.关闭流
        fr.close();
    }

6.字节流FileInputStream和FileOutputStream的使用

1.没有try- catch- finally时

@Test
public void test2() throws IOException {
    //实例化File类的对象,指明要操作的文件
    File file = new File("hello.txt");
    //2.提供具体的流
    FileInputStream fis = new FileInputStream(file);
    //3.数据的读入:read();返回读入的一个字符,如果达到文件末尾,返回-1;
    byte[] buffer = new byte[5];
    int len;
    while ((len = fis.read(buffer)) != -1) {
        for (int i = 0; i < len; i++) {
            System.out.print(buffer[i]);
        }
    }
    //4.关闭流
    fis.close();
}

2.对于文本文件(txt,java,c,cpp),使用字符流

3.对于非文本文件(.jpg,mp3,mp4,avi,.doc,.ppt),使用字节流

7.处理流之一:缓冲流

1.处理流:套接在已有的流的基础上

缓冲流的作用:提高文件的读写效率

Java-IO流基础知识

 

2.使用步骤:造流时:先造节点流,后造处理流-缓冲流

Java-IO流基础知识 

3.资源关闭时,先关外层的流,在关内层流

4.关闭外层流的同时,内层流也会自动的进行关闭,因此内层流的关闭可以省略。

5.提高读写速度的原因:内部提供了一个缓冲区。

6.使用BufferdReader和BufferedWriter

Java-IO流基础知识

7.读写方法总结 

Java-IO流基础知识

8.处理流之二:转换流

1.InputStreamReader:字节的输入流转换为字符的输入流

2.OutputStreamWriter:字符的输出流转换为字节的输出流

3.提供了字符流和字节流之间的转换

4.字符集

在造流时,第二个形参指明了字符集,具体使用哪个字符集,取决于文件dbcp.txt保存时使用的字符集。

5.字节输入流到字符输入流

Java-IO流基础知识

6.将utf-8文件转换为gbk文件

Java-IO流基础知识

7.编码决定了解码;文件编码的方式,决定了解析时使用的字符集。

9.标准输入输出流

1.标准输入流:System.in;键盘输入

2.标准输出流:System.out;控制台输出

10.打印流:PrintStream/PrintWriter

1.提供了一系列的print()重载方法;

2.System.out.println:标准打印流从控制台输出;

11.数据流:DateInputStream/DateOutputStream

作用:用于读取或写出基本数据类型的变量或字符串

12.对象流

可以存储和读取基本数据类型或对象的处理流

1.ObjectInputStream:反序列化:将磁盘文件中的对象还原为内存中的一个Java对象。

2.ObjectOutputStream:序列化:把内存中的Java对象保存到磁盘或通过网络传输出去。

3.对象的序列化机制:允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久的保存在磁盘上,或通过网络把这种二进制流传输到另一个网络节点。当其它程序获取了这种二进制流,就可以恢复成原来的Java对象。

Java-IO流基础知识

 

4.Java对象要想序列化,需要满足两个要求:当前类实现接口:Serializable

当前类提供一个全局常量:serialVersionUID

除了当前类需要实现Serializable接口外,还必须保证其内部所有属性也必须是可序列化的。(默认情况下,基本数据类型可序列化)

5.对象流不能序列化static和transient修饰的成员变量。

13.RandomAccessFile的使用

1.直接继承于Object类;实现了DateInput和DateOutput接口

2.既可以作为输入流,又可以作为输出流

3.创建实例时需要指定一个mode参数,该参数指定访问模式

4.如果作为输出流时,写出到的文件不存在,则在执行过程中自动创建;如果写出的文件存在,则会对原有文件内容进行覆盖,默认情况下是从头覆盖。

5.通过相关操作,实现插入数据的效果。

6.提供了一个seek(int pos)方法,能够在指定pos位置进行覆盖(插入)

7.这个类可以实现一个多线程断点下载的功能;下载前会建立两个临时文件,一个是与被下载文件大小相同的空文件,一个是记录文件指针的位置文件,每次暂停都会保存上一次的指针,在断点下载时,会继续从上一次的地方下载,从而实现断点下载功能。

14.NIO的使用

1.NiO是从1.4版本引入的一套心IO API,作用相同;但NIO是面向缓冲区的(IO是面向流的)、基于通道的IO操作。NIO可以更加高效的进行文件的读写操作。

2.jdk7对NiO进行了扩展,称为NIO.2

3.字符集

1.ASCII:美国标准信息交换码;一个字节的七位表示一个字符

2.ISO8859-1:欧洲码表,一个字节的八位表示

3.GB2312:中国的中文编码表;最多两个字节编码所有字符

4.GBK:中国的中文编码表升级,融合了更多的中文文字符号,最多两个字节编码

5.Unicode:国际标准码:融合了人类所有字符,为每个字符分配唯一的字符码;所有文字可以用两个字节编码

6.UTF-8:变长的编码方式,可用1-4个字节表示一个字符

7.为什么Unicode无法落地:因为Unicode也用两个字节编码,但如果第一位用0/1来表示一个字节表示一个字符还是两个字节表示一个字符,那就只剩2^15次方个不够用了。因此UTF-8使用变长方式解决此问题,根据前几个字符的改变来决定几个字节表示一个字符。文章来源地址https://www.toymoban.com/news/detail-485871.html

到了这里,关于Java-IO流基础知识的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java-IO流】cn.hutool.core.io.IORuntimeException: IOException: Stream closed

    今天在项目中需要读取request请求中的body多次,当我直接去read的时候出现了问题; 报错如下: 产生的原因如下: httpServletRequest中的流只能读取一次的原因 想要多次读取request中body的内容,需要先存储一份,然后读取; 问了导师,有一个类可以多次读取body内容,因为他会将

    2024年02月11日
    浏览(53)
  • SVG的一些基础知识,包括SVG坐标系统、支持的几何图形和样式,动画的基础知识,包括基本动画和路径动画

    SVG(可缩放矢量图形)是一种使用XML格式定义的图像格式,它可以将二维图像呈现为任意大小的图像,而不会产生像素化。由于它的矢量设计,SVG成为了实现各种图形和动画的理想平台。在本文中,我们将探讨如何使用SVG实现图形和动画。 在开始之前,让我们首先了解一下

    2024年02月03日
    浏览(53)
  • 【Java 基础】File & IO流

    java.io.File类是文件和目录路径名的抽象表示形式,主要用于文件和目录的创建、查找和删除等操作。 File:它是文件和目录路径名的抽象表示 文件和目录可以通过File封装成对象 File封装的对象仅仅是一个路径名。它可以是存在的,也可以是不存在的。 | 方法名 | 说明 | | —

    2024年02月05日
    浏览(35)
  • 【Java|基础篇】File类和IO流

    File类是Java中用于表示文件或目录的类。它提供了一些方法来操作文件和目录的属性和内容,可以进行文件的创建、删除、重命名等操作。 File类可以用于表示磁盘上的实际文件或目录,也可以表示一个虚拟的文件或目录。File对象可以通过路径来创建,路径可以是绝对路径或

    2024年02月15日
    浏览(31)
  • Java基础(十七)File类与IO流

    1.1 概述 File类及本章下的各种流,都定义在java.io包下。 一个File对象代表硬盘或网络中可能存在的一个文件或者文件目录(俗称文件夹),与平台无关。(体会万事万物皆对象) File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。如果需要访问文件内容本

    2024年02月02日
    浏览(36)
  • C#,入门教程(28)——文件夹(目录)、文件读(Read)与写(Write)的基础知识

    上一篇:   C#,入门教程(27)——应用程序(Application)的基础知识 https://blog.csdn.net/beijinghorn/article/details/125094837 C#知识比你的预期简单的多,但也远远超乎你的想象! 与 文件 相关的知识,不算多。 作为初学者,先学习 文本文件 的读写,就足够应付好几年了。 文件 自然是

    2024年01月23日
    浏览(56)
  • [静态时序分析简明教程(二)] 基础知识:建立时间、保持时间、违例修复及时序分析路径

    一个 数字芯片工程师 的 核心竞争力 是什么?不同的工程师可能给出不同的答复,有些人可能提到 硬件描述语言 ,有些人可能会提到对于 特定算法和协议的理解 ,有些人或许会提到 对于软硬件的结合划分 ,作者想说,这些说法, 其实对也不对 ,硬件描述语言,翻来覆去

    2023年04月22日
    浏览(52)
  • c#多线程—基础概念到“双色球”项目实现(附知识点目录、代码、视频)

    总结:视频中对于多线程讲的非常透彻,从线程基础概念—.net不同版本出现的线程方法—多线程常出现问题—双色球项目实践,每个知识点都有代码实操,受益匪浅。附上学习笔记和实操代码。 视频 线程:程序执行的最小单位,任何操作都是由线程完成的,使用同步时,资

    2024年02月11日
    浏览(52)
  • java基础入门-18-【IO(异常&File&综合案例)】

    异常 :指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。 在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式是中断处理。 异常指的并不是语法错误,语法错了,编译不通过

    2024年02月07日
    浏览(46)
  • 【JavaSE】Java基础语法(三十六):File & IO流

    java.io.File类是文件和目录路径名的抽象表示形式,主要用于文件和目录的创建、查找和删除等操作。 File:它是文件和目录路径名的抽象表示 文件和目录可以通过File封装成对象 File封装的对象仅仅是一个路径名。它可以是存在的,也可以是不存在的。 | 方法名 | 说明 | | —

    2024年02月07日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包