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

一、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节点流与字符流内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • BufferedInputStream(缓冲输入流)详解_动力节点Java学院整理

    BufferedInputStream 介绍 BufferedInputStream 是缓冲输入流.它继承于FilterInputStream. BufferedInputStream 的作用是为另一个输入流添加一些功能,例如,提供"缓冲功能"以及支持"mark()标记"和"reset()重置方法". BufferedInputStream 本质上是通过一个内部缓冲区数组实现的.例如,在新建某输入流对应的BufferedInputStream后,

  • Java中IO流简介_动力节点Java学院整理

    Java io简介 Java io系统的设计初衷,就是为了实现"文件.控制台.网络设备"这些io设置的通信.例如,对于一个文件,我们可以打开文件,然后进行读取和写入.在java 1.0中,java提供的类都是以字节(byte)为单位,例如,FileInputStream和FileOutputStream.而到了java 1.1,为了与国际化进行接轨,在java io中添加了许多以字符(Unicode)为单位进行操作的类. 在java io的称呼中,我们经常会提到"输入流&qu

  • Java IO流体系继承结构图_动力节点Java学院整理

    Java IO体系结构看似庞大复杂,其实有规律可循,要弄清楚其结构,需要明白两点: 1. 其对称性质:InputStream 与 OutputStream, Reader 与 Writer,他们分别是一套字节输入-输出,字符输入-输出体系 2. 原始处理器(适配器)与链接流处理器(装饰器) 其结构图如下: Reader-Writer体系 1. 基类 InputStream与OutputStream是所有字节型输入输出流的基抽象类,同时也是适配器(原始流处理器)需要适配的对象,也是装饰器(链接流处

  • Java字节流和字符流及IO流的总结

    从接收输入值说起 在日常的开发应用中,有时候需要直接接收外部设备如键盘等的输入值,而对于这种数据的接收方式,我们一般有三种方法:字节流读取,字符流读取,Scanner 工具类读取. 字节流读取 直接看一个例子: public class Demo01SystemIn { public static void main(String[] args) throws IOException { int a = System.in.read(); System.out.println(a); char

  • 详解JAVA 字节流和字符流

    1.InputStream 和 Reader InputStream 和 Reader 是所有输入流的抽象基类,本身并不能创建实例来执行输入,但它们将成为所有输入流的模板,所以它们的方法是所有输入流都可使用的方法. 在 InputStream 里包含如下三个方法. int read():从输入流中读取单个字节,返回所读取的字节数据(字节数据可直接转换为int类型). int read(byte[] b):从输入流中最多读取 b.length 个字节的数据,并将其存储在字节数组 b 中,返回实际读

  • Java IO字符流缓冲区实现原理解析

    字符流的缓冲区 缓冲区的出现,提高了对数据的读写效率,对应的类:BufferedWriter,BufferedReader 缓冲区要结合流才可以使用,缓冲区是在流的基础上对流的功能进行增强 BufferedWriter 将文本写入到字符输出流中,缓冲字符,以便提供对单个字符.数组和字符串的有效写入. 可以指定缓冲区大小,也可以接受默认大小.默认是足够大的用于大多数目的. 提供了一种newline()方法,利用平台自身观念的行分隔符由系统性line.separator定义.并不是所有的平台都使用换

  • Java的this关键字的使用与方法的重载相关知识

    Java this关键字详解 this 关键字用来表示当前对象本身,或当前类的一个实例,通过 this 可以调用本对象的所有方法和属性.例如: public class Demo{ public int x = 10; public int y = 15; public void sum(){ // 通过 this 点取成员变量 int z = this.x + this.y; System.out.println("x + y = " + z); } public static vo

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

    一.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() 当且仅当具有此名称的文件尚不存在时

  • 【Java IO流】字节流和字符流的实例讲解

    字节流和字符流 对于文件必然有读和写的操作,读和写就对应了输入和输出流,流又分成字节和字符流. 1.从对文件的操作来讲,有读和写的操作--也就是输入和输出. 2.从流的流向来讲,有输入和输出之分. 3.从流的内容来讲,有字节和字符之分. 这篇文章先后讲解IO流中的字节流和字符流的输入和输出操作. 一.字节流 1)输入和输出流 首先,字节流要进行读和写,也就是输入和输出,所以它有两个抽象的父类InputStream.OutputStream. InputStream抽象了应用程序读取数据的方式,即

  • Java 超详细讲解IO操作字节流与字符流

    目录 IO操作 字节流 FileInputStream FileOutputStream 字节流读写案例 字符流 FileReader FileWriter 字节流与字符流的区别 IO操作 字节流 java.io.InputStream 输入流,主要是用来读取文件内容的. java.io.OutputStream 输出流,主要是用来将内容字节写入文件的. FileInputStream 该流用于从文件读取数据,它的对象可以用关键字 new 来创建. 有多种构造方法可用来创建对象. 可以使用字符串

  • 简单总结Java IO中stream流的使用方法

    Java语言的输入输出功能是十分强大而灵活的,对于数据的输入和输出操作以"流"(stream)的方式进行.J2SDK提供了各种各样的"流"类,用以获取不同种类的数据,定义在包java.io中.程序中通过标准的方法输入或输出数据. Java中的流可以从不同的角度进行分类: 按照流的方向不同:分为输入流和输出流. 按照处理数据单位的不同:分为字节流(8位)和字符流(16位). 按照功能不同:分为节点流和处理流. 节点流:是可以从一个特定的数据源(节点)读写数据的流(例如

  • Java IO流 文件传输基础

    一.文件的编码 package com.study.io; /** * 测试文件编码 */ public class EncodeDemo { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { String s="好好学习ABC"; byte[] bytes1=s.getBytes();//这是把字符串转换成字符数组,转换成的字节序列用的是

  • Java全面解析IO流相关知识

    目录 前言 一.File 1.File类的概述和构造方法 2.File类创建功能 3.File类判断和获取功能 4.File类删除功能 二.字节流 1.IO流的概述和分类 2.字节流写数据 3.字节流写数据的两个小问题 字节流写数据如何换行 字节流写数据如何实现追加写入 4.字节流写入数据假异常处理 5.字节流读数据(重点) 6.字节缓冲流 7.如何选择怎样得数据读取呢? 三.字符流 1.为什么会出现字符流? 2.字符串中的编码解码问题 3.如何实现解决编译解码的问题 4.字符流写数据的方法 5

  • Java IO之包装流详解

    目录 1.前面讲的字符输入输出流,字节输入输出流都是字节流.那么什么是包装流呢? 2.缓冲流 3.转换流:把字节流转换为字符流 4.内存流(数组流): 5.合并流:把多个输入流合并为一个流,也叫顺序流,因为在读取的时候是先读第一个,读完了在读下面一个流. 总结 根据功能分为节点流和包装流(处理流) 节点流:可以从或向一个特定的地方(节点)读写数据.如FileReader. 处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写.如BufferedReader.处理流的构造方

  • Java中字节流和字符流的理解(超精简!)

    目录 引言 字节流和字符流 字节流 字节输入流 字节输出流 字符流 字符输入流 字符输出流 附:字节流和字符流的区别 总结 引言 在完完全全的完成本学期的学习任务之后,终于可以有时间继续更新Java相关的文章了.那么今天我们要学习的是的Java中的IO流(I即为Input,O即为Output),也称为输入流,输出流,其主要的作用是为了能够对文件中的数据进行输入和输出(读和写),更加方便了今后我们在Java道路上的学习,好了,废话不多说,我们开始今天的学习吧! 字节流和字符流 在上图中,橙色部分是

  • Java基础教程之字符流文件读写

    前言 上篇文章,我们介绍了 Java 的文件字节流框架中的相关内容,而我们本篇文章将着重于文件字符流的相关内容. 首先需要明确一点的是,字节流处理文件的时候是基于字节的,而字符流处理文件则是基于一个个字符为基本单元的. 但实际上,字符流操作的本质就是「字节流操作」+「编码」两个过程的封装,你想是不是,无论你是写一个字符到文件,你需要将字符编码成二进制,然后以字节为基本单位写入文件,或是你读一个字符到内存,你需要以字节为基本单位读出,然后转码成字符. 理解这一点很重要,这将决定你对字符流整体上的理

随机推荐