JAVA(IO流)

IO流

ctrl+shift+o快捷导包

概述和分类

Java中IO流主要用于传输数据。

  • 按照数据传输的方向分为:

    • 输入流(Input)
    • 输出流(Output)
  • 按照数据的种类分为:

    • 字节流:可以处理任何一种数据。
    • 字符流:只能处理文本数据。

如果希望将数据写到纯文本文件中,可以使用FileWriter类。

  • 1.导包
    import java.io.FileWriter;
  • 2.创建,构造方法
    • public FileWriter(String fileName),参数字符串就是文件的路径名称。
    • FileWriter fw=new FileWriter("xxx.txt");文件扩展名只能决定默认用什么软件打开文件,不能决定其内容。
  • 3.使用,成员方法
    • 写数据:public void write(String str),参数就是需要写到文件中的字符串
    • 关闭流,public void close(),关闭,获取相关资源
注意
  • 写入时一定记得最后调用close关闭,才能将数据写到文本上。
  • 如果指定文件不存在,那么会自动创建该文件。
  • 如果指定文件已经存在,那么会覆盖写入。
如果不想覆盖写入而是进行追加写入就需要另外一种重载形式的构造方法:
public FileWriter(String fileName,boolean append)

换行

换行其实也是一种字符,叫做“换行符”。
- Windows当中换行符是:\r\n,两个字符.
- macOS当中换行符是:早期是\r,现在是\n.
- Linux当中换行符是:\n。

Write的各种重载方法。

统一格式:write(xxx)。

xxx如下:
  • int ch //参数是单个字符所对应的数字(参考ASCII或者Unicode表)
  • String str//写一个完整字符串
  • String str,int offest,int count)//写字符串中一部分内容
  • char[] array//写一个完整的字符数组
  • char[] array,int offest,int count)//写字符数组当中的一部分内容
offest是起始位置,count是数量。

BufferedWriter

  • 也是一种用来写文件的类,属于字符输出流。
  • 区别于BufferedWriter有个一个长度为8192的char[]字符数组,当作缓冲区。
  • 每次写数据时实际都是不断想缓冲数组当中添加字符。
    • 如果缓冲数组已经满了,那么将会统一写到硬盘文件当中。
    • 如果还没写满,那么就等待下一次写入。
    • 如果最终关闭流的时候,数组仍然没满,那么也会将剩余的有效部分写到硬盘文件中。
使用
  • 首先创建一个普通FileWriter对象
  • 将这个包装成缓冲的BufferedWriter,用构造方法。(参数就是FileWriter的对象)
  • 后面使用跟FileWriter基本一样。
换行

newline()//自动根据操作系统选择对应的换行符。

FileReader用来将文本文件当中字符读取到程序当中。

  • 1.导包
    import java.io.FileReader;
  • 2.创建,构造方法
    • public FileReader(String fileName),参数字符串就是文件的路径名称。
    • FileWriter fw=new FileReader("xxx.txt");文件扩展名只能决定默认用什么软件打开文件,不能决定其内容。
    • 如果指定文件名对应文件不存在,那么将直接报错。
  • 3.使用,成员方法
    • 读取单个字符,public int read(),读取下一个字符,得到相对应的ASCII或Unicode值(如果没有字符需要读取,返回值为-1)
    • 关闭释放资源,public void close()
扩展

(char) 变量名称//将数字转化为ASCII码所对应的字符。

读取方式重载(提高读取效率)

  • public int read(char[] buf)一次性读取整个字符数组的数据。(返回值时数组当中读取到的有效个数)

BufferedReader

  • BufferedReader也有8192长度的char[]字符数组当做缓冲区使用。
  • 当读取数据的时候,一次性从硬盘当中读取最多8192字符。
  • 再调用read方法时,只时从缓冲区当中拿出来字符进行使用。
  • 如果缓冲区字符被“取空”,那么将会自动再次读取8192个再次放在缓冲区中。
使用跟write相同。
读取一行

readline()//如果没有可以读取了返回null.

posted @ 2024-01-08 00:52  拍手称快  阅读(6)  评论(0编辑  收藏  举报