Java IO系统

Posted by Xsp on January 13, 2018

File 类

目录列表

File 既能代表一个特定的文件的名称,也能代表一个目录下的一组文件的名称,如果是一个文件集,则可以调用 list() 方法返回字符数组。

// 能访问java/util目录下的所有类,不能访问java/util子目录下的所有类。
// 因为如果java.util里面有个a类,java.util.regex里面也有个a类,我们若是要调用a类的方法或属性时,无法判断使用哪个a类呢。
import java.util.*;
// 所以如果要用Pattern,还需要再引入
import java.util.regex.Pattern;
// 注解只是可以方便编译器检查,即使不写也不会报错
@Override

匿名内部类的参数必须是final?

目录遍历

目录检查及创建

private static void fileData(File f) {
    System.out.println(
        "Absolute path: " + f.getAbsolutePath() +
        "\n Can read: " + f.canRead() +
        "\n Can write: " + f.canWrite() +
        "\n getName: " + f.getName() +
        "\n getParent: " + f.getParent() +
        "\n getPath: " + f.getPath() +
        "\n length: " + f.length() +
        "\n lastModified: " + f.lastModified());
    if(f.isFile())
        System.out.println("It’s a file");
    else if(f.isDirectory())
        System.out.println("It’s a directory");
}

// 创建目录
mkdir()
// 递归创建目录
mkdirs()

输入和输出

Java 1.0:InputStreamOutputStream,面向字节的IO Java 1.1:ReaderWriter,提供兼容Unicode 和面向字符的IO

RandomAccessFile

文件内部移动及随机读写。

IO流的典型使用方式

从缓冲读入

BufferedReader in = new BufferedReader(new FileReader(filename));
StringBuilder out = new StringBuilder();

基本的文件输出

FileWriter 对象可以向文件写入数据,BufferedWriter 将其包装用以缓冲输出以提高性能, PrintWriter 提供格式化输出机制。

PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(file)));

Java SE5 提供了简写

PrintWriter out = new PrintWriter(file);

存储和恢复数据

DataInputStream();
DataOutputStream();

管道流

主要用于多线程,任务之间的通信。

标准IO

System.out 和 System.err 被包装成 PrintStream, System.in 则是未包装的InputStream.

IO 重定向

setIn(InputStream);
setOut(PrintStream);
setErr(PrintStream);

新IO

java 1.4 引入了新的IO类库,旨在提高速度。而且旧的IO包已经nio重新实现过。

待再看