广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java IO流之节点流与字符流的相关知识总结
  • 725
分享到

Java IO流之节点流与字符流的相关知识总结

2024-04-02 19:04:59 725人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

一、File file是文件和目录路径名的抽象表示 1.1 File的用法 用法: File file = new File("路径名"); //如 File file =

一、File

file是文件和目录路径名的抽象表示

1.1 File的用法

用法:


File file = new File("路径名");

//如
File file = new File("L:\\FileTestDemo\\AAA\\aaa.txt");

注意:在windows中,路径名不能使用单个的\,单个的\为转义字符,可以使用\\///

1.2 File的常用方法

1.boolean createNewFile()

当且仅当具有此名称的文件尚不存在时,以原子方式创建由此抽象路径名命名的新空文件。 注意: 不能创建文件夹,只能创建文件


 System.out.println(file.createNewFile());  //true or false表示是否创建成功

2.boolean delete()

删除此抽象路径名表示的文件或目录。


System.out.println(file.delete());

3.boolean exists()

测试此抽象路径名表示的文件或目录是否存在。


if(!file.exists()){
    System.out.println("文件不存在,创建"+ file.createNewFile());
}

4.String getName()

返回此抽象路径名表示的文件或目录的名称。


System.out.println(file.getName());

5.long lastModified()

返回上次修改此抽象路径名表示的文件的时间。


System.out.println(new SimpleDateFORMat().format(new Date(file.lastModified())));

二、io

File 类:

只能操作文件外部的内容,无法操作文件内部内容的读写

流:
数据以先入先出的顺序进行传输,流就是管道,就是用来 传输数据的

IO 流:
java提供了一个io包,提供了很多类,提供了很多功能能够实现数据的读写

2.1 流的概念

数据源就像水箱,流就像水管中流着的水流,程序就是我们最终的用户。 流是一个抽象、动态的概念, 是一连串连续动态的数据集合

2.2 流的分类

按流向可分为输入流(InputStream和Reader)和输出流(OutputStream和Writer)

按操作单元可分为字节流(InputStream 和 OutputStream)和字符流(Reader 和 Writer)

按功能可分为节点流(可以直接从数据源或目的地读写数据)和功能流(是处理流的流。通过对其他流的处理提高程序的性能)

2.3 IO操作步骤

在进行任何操作之前,首先要明确目的(读还是写),找准源头(读取),找准目的地(写出)

1.建立联系 :这一步骤是为了获取流,如果此时是文件,则需要将文件抽象到内存形成对象。后期也 可以是其他的数据源

2.选择流:从读写、数据单元和功能方面考虑。输入|输出,字节|字符,结点流|处理流。

3.执行操作:该读就读,该写就写。考虑是一次性完成还行需要循环。

4.释放资源:程序中打开的文件 IO 资源不属于内存中的资源,垃圾回收无法回收,需要显示关闭。

2.4 基本输入流(InputStream和Reader)

int read() -> 返回值是这一次读取到的内容(一个字节的值, 一个字符的值)

int read(byte[] car) -> 将读取到的字节临时存储到car数组中, 返回实际读取到的字节数量

int reade(char[] car) -> 将读取到的字符临时存储到car数组中, 返回实际读取到的字符数量

无论以何种方式 read(), read([]) 读取文件, -1,就意味着读取到文件末尾

字符 -> 只能操作文本,直接读取到的就是字符

字节 -> 任意数据, 但是如果操作是字符的话,还需要我们转换(麻烦)

单个字节读取

以InputStream为例,Reader同理


public class IOTest {
    public static void main(String[] args) throws IOException {
        //选择流,建立联系
        InputStream is = new FileInputStream("L:\\FileTestDemo\\123.txt");

        //无论以何种方式 read(), read([]) 读取文件, -1,就意味着读取到文件末尾 
        //则当result的值为-1时结束
        int result = -1;
        while((result = is.read()) != -1){
            System.out.println((char)result);
        }

        //关闭
        is.close();

    }
}

多个字节读取


public class IOTest {
    public static void main(String[] args) throws IOException {
        //选择流,建立联系
        InputStream is = new FileInputStream("L:\\FileTestDemo\\123.txt");

        //定义运输数组
        byte[] car = new byte[1024];
        int len = -1;
        //当result的值为-1时结束
        while ((len = is.read(car)) != -1){
            System.out.println(new String(car,0,len));
        }

        //关闭
        is.close();

    }
}

2.5 基本输出流(OutputStream和Writer)

以OutputStream为例,Writer同理

注意:在关闭(close)输出流前需要先清空(flush)缓存区的数据

flush()一般主要用在IO中,即清空缓冲区数据,就是说你用读写流的时候,其实数据是先被读到了内存中,然后用数据写到文件中,当你数据读完的时候不代表你的数据已经写完了,因为还有一部分有可能会留在内存这个缓冲区中。这时候如果你调用了 close()方法关闭了读写流,那么这部分数据就会丢失,所以应该在关闭读写流之前先flush(),先清空数据。

单字节写入


public class OutputStream01 {

    public static void main(String[] args) throws IOException {
        选择流,建立联系
        OutputStream os = new FileOutputStream("L:\\FileTestDemo\\abc.txt",true);
        //写入数据
        os.write('a');

        //刷出流
        os.flush();
        //关闭
        os.close();
    }
}

多字节输入


public class OutputStream02 {

    public static void main(String[] args) throws IOException {
        //构建输出流
        OutputStream os = new FileOutputStream("L:\\FileTestDemo\\abc.txt");

        //需要写入的数据
        String str = "我好菜啊\n" +
                "就这?\n" +
                "\t\t\t不是吧,阿sir";

        //转为字节数据存入数组
        byte[] arr = str.getBytes();

        //写入数据
        os.write(arr);

        //刷出数据
        os.flush();
        //关闭
        os.close();
    }
}

2.6 输入输出联合使用

以InputStream和OutputStream为例


public class In_Out {
    public static void main(String[] args){
		//提升作用域范围
        InputStream is = null;
        OutputStream os = null;
        try {
            //创建输入流
            is = new FileInputStream("L:\\FileTestDemo\\aaa.txt");
            os = new FileOutputStream("L:\\FileTestDemo\\abc\\bbb.txt");

            //创建输入数组
            byte[] arr = new byte[1024];

            int len = -1;

            while ((len = is.read(arr)) != -1){
                //write(byte[] b, int off, int len) 将从偏移量 off开始的指定字节数组中的 len字节写入此输出流
                os.write(arr,0,len);
            }

            //刷出
            os.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //后打开,先关闭
            //先关闭输出流
            if(os != null){
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            //再关闭输入流
            if(is != null){
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}

2.7 异常的处理

在使用IO流的时候会出现编译时异常,可以使用抛出异常抓取异常来处理

抛出异常


public class IOTest {
    
    public static void main(String[] args) throws IOException {
        //建立联系可能会遇到找不到文件位置(FileNotFoundException)异常
        //这时候可以抛出(throw)异常
        InputStream is = new FileInputStream("L:\\FileTestDemo\\123.txt");
    }
}

抓取异常


public class IOTest {
    public static void main(String[] args){
    	//通过try...carch...来抓取异常
        try {
            InputStream is = new FileInputStream("L:\\FileTestDemo\\123.txt");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

    }
}

2.8 字节流与字符流的区别

字节流和字符流的区别:

1.每次读写的字节数不同;

2.字符流是块读写,字节流是字节读写;

3.字符流带有缓存,字节流没有。

java流在处理上分为字符流和字节流。字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。

字符流和字节流,一个属性范围小,一个属性范围大,字符流只能是字符这一种类型,但是字节流中可以是字符,可以是二进制文件,可以是音频,可以是各种各样的类型,只要符合字节形式存储的都可以接字节流,而字符流只能接字符。

到此这篇关于Java IO流之节点流与字符流的相关知识总结的文章就介绍到这了,更多相关Java节点流与字符流内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java IO流之节点流与字符流的相关知识总结

本文链接: https://www.lsjlt.com/news/128851.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java IO流之节点流与字符流的相关知识总结
    一、File file是文件和目录路径名的抽象表示 1.1 File的用法 用法: File file = new File("路径名"); //如 File file =...
    99+
    2022-11-12
  • Java字节流和字符流总结IO流!
    目录从接收输入值说起字节流读取字符流读取Scanner 读取什么是 IO 流字节流和字符流字节流字节输入流字节输出流缓冲流的原理字符流字符输入流字符输出流RandomAccessFi...
    99+
    2022-11-12
  • Java字节流和字符流及IO流的总结
    目录从接收输入值说起字节流读取字符流读取Scanner 读取什么是 IO 流字节流和字符流RandomAccessFile从接收输入值说起 在日常的开发应用中,有时候需要直接接收外部...
    99+
    2022-11-12
  • JAVA IO流知识点全总结
    文件的创建方式 首先查看File类的构造器,得出有三种常见的创建方式 直接传入构建的文件路径,通过构造器 File(String pathname),直接传入文件路径,以下为演示代码(在IO流的操作中总是伴随着编译时异常,可使用Alt+E...
    99+
    2023-08-16
    java intellij-idea
  • JAVA的IO流相关知识点有哪些
    今天小编给大家分享一下JAVA的IO流相关知识点有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一.Input和Outp...
    99+
    2023-06-03
  • Java中IO操作字节流与字符流的示例分析
    这篇文章主要为大家展示了“Java中IO操作字节流与字符流的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java中IO操作字节流与字符流的示例分析”这篇文章吧。IO操作字节流java....
    99+
    2023-06-29
  • 关于java中I/O流的字节流与字符流的详细介绍
    一、绪论如果要进行文件内容的操作那么必须依靠数据流完成,而数据流分为两种:字节流:InputStream(字节输入流)、OutputStream(字节输出流);字符流:Reader(字符输入流)、Writer(字符输出流);二、区别字节流是...
    99+
    2017-12-15
    java教程 java I/O 字节流 字符流
  • Java中类与对象的相关知识点总结
    目录一、面向过程与面向对象的理解二、类与对象的理解与认识三、类的成员1.字段/属性/成员变量2.对null的基本认识3.方法 (method)4.static 关键字四、封装1. p...
    99+
    2022-11-12
  • JAVA正则表达式及字符串的替换与分解相关知识总结
    JAVA正则表达式及字符串的替换与分解 Java 提供了 java.util.regex 包来与正则表达式进行模式匹配 java.util.regex 包主要包括以下三个类: Pat...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作