Java笔记:I/O

Posted arseneyao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java笔记:I/O相关的知识,希望对你有一定的参考价值。

一、流

Java通过流实现I/O,流是一种可以产生或使用信息的抽象。

Java定义了两种类型的流:

  • 字节流:处理字节的输入和输出,例如读写二进制数据。
  • 字符流:处理字符的输入和输出。

在底层所有I/O仍然是面向字节的,字符流知识为处理字符提供更高效的方法。

 

二、字节流类

BufferedInputStream

BufferedOutputStream

缓冲的输入流

缓冲的输出流

ByteArrayInputStream

ByteArrayOutputStream

读取字节数组的输入流

写入字节数组的输出流

DataInputStream

DataOutputStream

读取标准数据类型的方法的输入流

写入标准数据类型的方法的输出流

FileInputStream

FileInputStream

读取文件的输入流

写入文件的输出流

InputStream

OutputStream

描述流输入的抽象类

描述流输出的抽象类

FilterInputStream

FilterOutputStream

实现InputStream

实现OutputStream

ObjectInputStream

ObjectOutputStream

对象的输入流

对象的输出流

PipedInputStream

PipedOutputStream

输入管道

输出管道

PrintStream

包含print和println的输出流

PushbackInputStream

允许字节返回的输入流

SequenceInputStream

由多个依次读取的输入流组合而成的输入流

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

三、字符流类

BufferedReader

BufferedWriter

缓冲的输入字符流

缓冲的输出字符流

CharArrayReader

CharArrayWriter

从字符数组读取内容的输入流

向字符数组写入内容的输出流 

FileReader

FileWriter

读取文件的输入流

写入文件的输出流

FilterReader

FilterWriter

过滤的读取器

过滤的写入器

InputStreamReader

OutputStreamWriter

将字节转换为字符的输入流

将字符转换为字节的输出流 

StringReader

StringWriter

从字符串读取内容的输入流

向字符串写入内容的输出流 

PipedReader

PipedWriter

输入管道

输出管道 

Reader

Writer

描述字符流输入的抽象类

描述字符流输出的抽象类 

PrintWriter

包含print和println的输出流 

PushbackReader

允许字符返回的输入流

LineNumberReader

支持行操作的输入流

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

四、预定义流

System包含的预定义流

  • System.out:标准输出流,PrintStream类型对象。
  • System.err:标准错误流,PrintStream类型对象。
  • System.in:标准输入流,InputStream类型对象。

 

五、控制台

技术分享图片
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;

class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        char c = (char) reader.read();//获取字符
        System.out.write(c);

        String str = reader.readLine();//读取字符串
        PrintWriter writer = new PrintWriter(System.out, true);
        writer.println(str);
    }
}
View Code

 

六、读写文件

技术分享图片
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

class Solution {
    static String read(String fileName) {
        FileInputStream fin = null;
        StringBuilder builder = new StringBuilder();
        try {
            fin = new FileInputStream(fileName);
            int i;
            do {
                i = fin.read();//读取字节
                if (i != -1)//-1表示到达文件结尾
                    builder.append((char) i);
            } while (i != -1);
        } catch (FileNotFoundException exc) {
            System.out.println("Cannot open file");
        } catch (IOException exc) {
            System.out.println("Cannot read file");
        } finally {
            try {
                if (fin != null)
                    fin.close();
            } catch (IOException exc) {
                System.out.println("Cannot close file");
            }
        }
        return builder.toString();
    }

    static void write(String fileName, String content) {
        FileOutputStream fout = null;
        try {
            fout = new FileOutputStream(fileName);
            for (int i = 0; i < content.length(); i++)
                fout.write((int) content.charAt(i));//写入字节
        } catch (FileNotFoundException exc) {
            System.out.println("Cannot open file");
        } catch (IOException exc) {
            System.out.println("Cannot write file");
        } finally {
            try {
                if (fout != null)
                    fout.close();
            } catch (IOException exc) {
                System.out.println("Cannot close file");
            }
        }
    }
}
View Code

自动关闭文件,离开代码块后会隐式调用close方法关闭流关联的对象。

技术分享图片
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

class Solution {
    public static void main(String[] args) {
        try (FileInputStream fin = new FileInputStream("file.txt")) {
            int i;
            do {
                i = fin.read();
                if (i != -1)
                    System.out.print((char) i);
            } while (i != -1);
        } catch (FileNotFoundException exc) {
            System.out.println("Cannot open file");
        } catch (IOException exc) {
            System.out.println("Cannot read file");
        }
    }
}
View Code

 

以上是关于Java笔记:I/O的主要内容,如果未能解决你的问题,请参考以下文章

Java笔记:流I/O

Java笔记:非阻塞I/O

笔记:I/O流-文件操作

Java I/O流学习笔记

DAY13JAVA第十三天I/O学习笔记

DAY15Java第十五天I/O学习笔记