Java中IO

作者: iDevOps | 来源:发表于2019-09-15 21:55 被阅读0次

java.io包

分类
  • 按流向分类
    输入流: 把数据从其他设备上读取到内存中的流
    输出流: 把数据从内存中写出到 其他设备上的流
  • 按数据类型分类
    字节流:以字节为单位,读写数据的流
    字符流:以字符为单位,读写数据的流
顶级父类
输入流 输出流
字节流 InputStream OutputStream
字符流 Reader Writer
字节流

一切皆字节

  • 输入流(InputStream)


    常用子类FileInputSteam
构造函数
FileInputStream(File file)   #File对象
FileInputStream(String name)   #文件路径名

常用方法
public void close() :关闭此输入流并释放与此流相关联的任何系统资源
public abstract int read() : 从输入流读取数据的下一个字节
public int read(byte[] b) : 从输入流中读取一些字节数,并将它们存储到字节数组b中 
......

示例
FileInputStream fs = new FileInputStream("test.txt");
byte[] b = new byte[2];
int len;
while ((len = fs.read(b)) != -1){
    System.out.println(new String(b));
}
fs.close();
  • 输出流(OutputStream)
构造函数
public FileOutputStream(File file) :创建文件输出流以写入由指定的 File对象表示的文件。 
public FileOutputStream(String name) : 创建文件输出流以指定的名称写入文件
public FileOutputStream(File file, boolean append) :是否追加
public FileOutputStream(String name, boolean append) : 是否追加

常用方法
write(int b)   每次可以写出一个字节数据
write(byte[] b)  每次可以写出数组中的数据
write(byte[] b, int off, int len)  每次写出从off索引开始,len个字节

示例代码
FileOutputStream fos = new FileOutputStream("test.txt");
fos.write(97); //int类型四个字节,但是只会保留一个字节的信息写出
fos.write("测试".getBytes());
fos.write("abcdefg".getBytes(), 2, 2);
fos.write("\r\n".getBytes(), 2, 2);  //换行 Windows : \r\n Mac和Linux : \n 
fos.close(); //流操作完毕后,必须释放系统资源,调用close方法,千万记得
字符流

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

  • 输入流(Reader)
构造方法
FileReader(File file) : 创建一个新的 FileReader ,给定要读取的File对象
FileReader(String fileName) : 创建一个新的 FileReader ,给定要读取的文件的名称

常用方法
public int read() : 从输入流读取一个字符
public int read(char[] cbuf) : 从输入流中读取一些字符,并将它们存储到字符数组cbuf中 
public void close() :关闭此流并释放与此流相关联的任何系统资源

示例代码
读取字符
FileReader reader = new FileReader(new File("test.txt"));
int b;
while ((b = reader.read()) != -1){
    System.out.println((char)b);
}
reader.close();
读取字符数组
FileReader reader = new FileReader(new File("test.txt"));
int len;
char[] b = new char[2];
while ((len = reader.read(b)) != -1){
    System.out.println(b);
}
reader.close();  
  • 输出流(Writer)
构造函数
FileWriter(File file) : 创建一个新的 FileWriter,给定要读取的File对象。 
FileWriter(String fileName) : 创建一个新的 FileWriter,给定要读取的文件的名称

常用方法
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() 关闭此流,但要先刷新

示例代码
FileWriter fw = new FileWriter("test.txt");
fw.write(97);
fw.write('a');
fw.write("bbbbbbb");
fw.write("测试");
fw.close();
缓冲流
  1. 对普通字节流和字符流的增强
  2. 基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO 次数,从而提高读写的效
  3. 字节缓冲流: BufferedInputStream , BufferedOutputStream
  4. 字符缓冲流: BufferedReader , BufferedWriter
  • 字节缓冲流
构造方法
public BufferedInputStream(InputStream in) :创建一个新的缓冲输入流。 
public BufferedOutputStream(OutputStream out) : 创建一个新的缓冲输出流。

示例代码
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("test.txt"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("test1.txt"));
byte[] b = new byte[1028];
while (bis.read(b) != -1){
    bos.write(b);
}
bis.close();
bos.close();
  • 字符缓冲流
构造方法
public BufferedReader(Reader in) :创建一个 新的缓冲输入流
public BufferedWriter(Writer out) : 创建一个新的缓冲输出流

特有方法
BufferedReader: public String readLine() : 读一行文字。 
BufferedWriter: public void newLine() : 写一行行分隔符,由系统属性定义符号

示例代码
BufferedReader br = new BufferedReader(new FileReader("test.txt"));
String line = null;
while ((line = br.readLine()) != null){
    System.out.println(line);
}
br.close();

相关文章

  • Java中的IO模型

    Java中的IO模型 Java中的IO模型有四种: 同步阻塞IO 同步非阻塞IO IO多路复用 异步IO 其中IO...

  • IO

    一 IO中各个流的基本用法 参考: java中的IO整理 二 IO体系 参考:看完这个,Java IO从此不在难 ...

  • 10. Java IO: Readers and Writers

    想要查看此教程的目录请点击:Java IO教程目录贴地址 Java IO中的java.io.Reader和java...

  • 详解IO复用模型select,poll,epoll机制

    在Java中,主要有三种IO模型,分别是阻塞IO(BIO)、非阻塞IO(NIO)和 异步IO(AIO)。Java中...

  • Java I/O 1.1

    Java IO一般大家常说的IO分为两个部分: 1.java.io包中堵塞型IO(BIO);2.java.nio包...

  • Java网络编程:Netty框架学习(二)---Java NIO

    概述 上篇中已经讲到Java中的NIO类库,Java中也称New IO,类库的目标就是要让Java支持非阻塞IO,...

  • Java中IO

    java.io包 分类 按流向分类输入流: 把数据从其他设备上读取到内存中的流输出流: 把数据从内存中写出到 其他...

  • 从源码设计角度理解Java IO

    概述 Java的核心库java.io提供了全面的IO接口。包括:文件读写、标准设备输出等。Java中IO是以流为基...

  • NIO与BIO的区别

    BIO的概念又称Java IO,是java.io包中的InputStream、OutputStream这种同步、阻...

  • Java知识梳理三

    一、Java中的IO 1.IO的概述 Java IO方式有很多种,基于不同的IO抽象模型和交互方式,可以进行...

网友评论

      本文标题:Java中IO

      本文链接:https://www.haomeiwen.com/subject/acodyctx.html