java默认使用字符编码和长度,字符的编码规则

  

  一、信息组织概述   

  

  1.1 Java中的I/O操作主要是指利用java.io包下的内容进行输入输出操作。输入也叫读数据,输出也叫写数据。   

  

  1.2 io的分类   

  

  根据数据的流向,分为输入流和输出流。   

  

  输入流:将数据从其他设备读入内存的流。   

  

  输出流:将数据从内存写入其他设备的流。   

  

  根据数据的类型,可以分为字节流和字符流。   

  

  字节流:以字节为单位读写数据的流。   

  

  字符流:用字符读写数据的流。   

  

  1.3顶级父母   

  

     

  

  第二,字节流   

  

  2.1一切都是一个字节:所有文件数据(文本、图片、视频等。)是以二进制数字的形式存储的,传输也是如此。因此,字节流可以传输任何文件数据。在操作流的时候,我们要始终明确,无论使用什么样的流对象,底层传输的始终是二进制数据。   

  

  2.2字节输出流output stream:Java . io . output stream抽象类是表示字节输出流所有类的超类,将指定的字节信息写出到目的地。它定义了字节输出流的基本公共函数方法。   

  

  2.2.1常用方法:   

  

  Public void close():关闭该输出流,并释放与该流相关的所有系统资源。   

  

  Public flush():刷新这个输出流,并强制写出所有缓冲的输出字节。   

  

  Public void write(byte b):将指定字节数组中的b.length字节写入该输出流。   

  

  Public void write (byte b,int off,int len):从指定的字节数组中写入len字节,并从offset输出到此输出流。   

  

  公共抽象void write(int b):将指定的字节输出到流中。   

  

  2.3 FileOutputStream类:java.io.FileOutputStream类是一个FileOutputStream,用于将数据写入文件。   

  

  2.3.1施工方法:   

  

  公共文件输出流(file file):创建一个File output stream来写入指定File对象表示的文件。   

  

  Public output stream (string name):创建一个fileoutputstream并将其写入指定名称的文件。   

  

  注意:当你创建一个流对象时,你必须传递一个文件路径。在这个路径下,如果这个文件不存在,它将被创建。如果有这个文件,这个文件的数据将被清除。   

  

  代码演示:   

  

     

  

  2.3.3写入数据的常用方法:   

  

  Write(int b):一次可以写入一个字节的数据。   

  

  Write(字节b):每次都可以写出数组中的数据。   

  

  Write(byte b,int off,int len),每次从off索引开始写,len字节。   

  

  2.3.4写入数据的代码演示:   

  

     

  

  2.4数据添加和延续   

  

  public File output stream(File File,boolean append):创建File output stream以写入由指定File对象表示的文件。   

  

  Public output stream (string name,boolean append):创建fileoutputstream并将其写入指定名称的文件。   

  

  注意:append为true则追加数据,为false则清空原始数据。使用创建的输出流对象,您可以指定是追加还是继续写入。   

  

  2.5数据写换行符:在Windows系统中,换行符是\r\n.   

  

  2.5.1使用示范:fos.write('\r\n '。getBytes());   

  

  2.6字节输入流InputStream:Java . io . InputStream抽象类是代表字节输入流所有类的超类,可以将字节信息读入内存。塔丁   

义了字节输入流的基本共性功能方法。

  


  

2.6.1 常用方法:

  

public void close():关闭此输入流并释放与此流相关联的任何系统资源。

  

public abstract int read() :从输入流读取数据的下一个字节。

  

public int read(byte<> b) :从输入流中读取一些字节数,并将它们存储到字节数组b中

  


  

2.7 FileInputStream类:java.io.FileInputStream 类是文件输入流,从文件中读取字节。

  

2.7.1 构造方法:

  

FileInputStream(File file) :通过打开与实际文件的连接来创建一个FileInputStream ,该文件由文件系统中的File对象file命名。

  

FileInputStream(String name) :通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名name命名。

  


  

2.7.2 注意事项:当你创建一个流对象时,必须传入一个文件路径。该路径下,如果没有该文件,会抛出FileNotFoundException。

  


  

2.7.3 读取字节数据:

  

1. 读取字节: read 方法,每次可以读取一个字节的数据,提升为int类型,读取到文件末尾,返回 -1

  

2. 使用字节数组读取: read(byte<> b) ,每次读取b的长度个字节到数组中,返回读取到的有效字节个数,读取到末尾时,返回 -1

  


  

2.8 字节流练习:图片复制

  

2.8.1 复制原理分析:从已有文件中读取字节,将该字节写出到另一个文件中

  

2.8.2 代码演示:

  

  


  

三、字符流

  

3.1 当使用字节流读取文本文件时,可能会有一个小问题。就是遇到中文字符时,可能不会显示完整的字符,那是因为 一个中文字符可能占用多个字节存储。所以Java提供一些字符流类,以字符为单位读写数据,专门用于处理文本文件。

  


  

3.2 字符输入流Reader:java.io.Reader抽象类是表示用于读取字符流的所有类的超类,可以读取字符信息到内存中。它定义了字符输入流的基本共性功能方法。

  

3.2.1 常用方法:

  

public void close():关闭此流并释放与此流相关联的任何系统资源。

  

public int read():从输入流读取一个字符。

  

public int read(char<> cbuf) : 从输入流中读取一些字符,并将它们存储到字符数组cbuf中。

  


  

3.3 FileReader类:java.io.FileReader类是读取字符文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。

  

3.3.1 构造方法:

  

FileReader(File file):创建一个新的 FileReader ,给定要读取的File对象。 FileReader(String fileName):创建一个新的 FileReader ,给定要读取的文件的名称。

  

3.3.2 读取字符数据:

  

1. 读取字符:read方法,每次可以读取一个字符的数据,提升为int类型,读取到文件末尾,返回 -1 ,循环读取

  

2. 使用字符数组读取:read(char<> cbuf) ,每次读取b的长度个字符到数组中,返回读取到的有效字符个数, 读取到末尾时,返回 -1

  


  

3.4 字符输出流Writer:java.io.Writer 抽象类是表示用于写出字符流的所有类的超类,将指定的字符信息写出到目的地。它定义了字节输出流的基本共性功能方法。

  

3.4.1 构造方法:

  

void write(int c) 写入单个字符。

  

void write(char<> cbuf) 写入字符数组。

  

abstract void write(char<> cbuf, int off, int len) 写入字符数组的某一部分,off数组的开始索引,len写的字符个数。

  

void write(String str) 写入字符串。

  

void write(String str, int off, int len)写入字符串的某一部分,off字符串的开始索引,len写的字符个数。

  

void flush() 刷新该流的缓冲。

  

void close() 关闭此流,但要先刷新它。

  


  

3.5 FileWriter类:java.io.FileWriter类是写出字符到文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。

  

3.5.1 构造方法:

  

FileWriter(File file) :创建一个新的 FileWriter,给定要读取的File对象。 FileWriter(String fileName) :创建一个新的 FileWriter,给定要读取的文件的名称。

  

3.5.2 基本写出数据:

  

1.写出字符: write(int b) 方法,每次可以写出一个字符数据

  

2.写出字符数组:write(char<> cbuf)

  

3.写出指定长度的字符数组:write(char<> cbuf, int off, int len)

  

4.写出字符串:write(String str)

  

5.写出指定长度的字符串:write(String str, int off, int len)

  


  

3.5.3 注意事项:未调用close方法,数据只是保存到了缓冲区,并未写出到文件中。

  


  

3.5.4 关闭和刷新:因为内置缓冲区的原因,如果不关闭输出流,无法写出字符到文件中。但是关闭的流对象,是无法继续写出数据的。如果我们既想写出数据,又想继续使用流,就需要 flush 方法了。

  

flush:刷新缓冲区,流对象可以继续使用。

  

close:先刷新缓冲区,然后通知系统释放资源。流对象不可以再被使用了。

  


  

四、IO异常的处理

  

4.1 之前的入门练习,我们一直把异常抛出,而实际开发中并不能这样处理,建议使用 try...catch...finally代码块,处理异常部分

  


  

4.2 JDK9改进的代码演示:

  

  

  


  

五、属性集

  

5.1 java.util.Properties继承于Hashtable,来表示一个持久的属性集。它使用键值结构存储数据,每个键及其对应值都是一个字符串。

  

5.2 Properties类

  

5.2.1 构造方法:

  

public Properties() :创建一个空的属性列表。

  

5.2.2 基本的存储方法:

  

public Object setProperty(String key, String value) : 保存一对属性。

  

public String getProperty(String key) :使用此属性列表中指定的键搜索属性值。 public Set stringPropertyNames() :所有键的名称的集合。

  


  

5.2.3 与流相关的方法:

  

public void load(InputStream inStream) : 从字节输入流中读取键值对。

  


  

5.2.3.1 代码演示:

  

相关文章