File类常用API

图片说明

IO

Java的IO在我不会Java的时候觉得非常繁琐。但当我熟悉Java以后就觉得没什么太难的点了。
IO本身涉及非常多的类,但大部分不常用。通常只要会BufferedReader BufferedWriter即可

FileWriter & FileReader

字符流只能处理文本文件。

FileWriter fw = null;
char[] chars = new char[]{'h','e','l','l','o'};
try {
    fw = new FileWriter(path + fileName);
//    fw = new FileWriter(path + fileName, true);  追加模式
    fw.write('a');
    fw.write(chars, 1, 3);
    fw.write(chars);
    fw.close();
} catch (IOException e) {
    e.printStackTrace();
} finally {
    if (fw != null) {
        try {
            fw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
FileReader fileReader = null;
try {
    fileReader = new FileReader(path + fileName);
    char ch = (char) fileReader.read();
    System.out.println(ch);
} catch (IOException e) {
    e.printStackTrace();
} finally {
    if (fileReader != null) {
        try {
            fileReader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

FileInputStream & FileOutputStream

API和上面的基本一样,区别就在参数基本都是byte或byte数组。
注意FileInputStream有个API是available,可以获取与输入流关联的文件大小。这样在文件小的时候可以直接开这么大的缓冲区,这样比较方便。

BufferedInputStream & BufferedOutputStream

API也基本不变。内置了8M的缓冲区。

BufferedReader & BufferedWriter

最常用的方法就是readLine。做OJ一直用。
writer的话可以write,再newLine()。newLine单独输出一个换行符。

ObjectInputStream &ObjectOutputStream

可以输入输出对象。
重要的点有两个。1是要加版本号。
2是在读取文件中的对象的时候无法判断读取到什么地方了。换句话说是不知道文件里有几个对象。
所以建议在把对象写入文件之前,先把所有你要写入的对象保存在集合里,然后把集合写入到文件中。这样可以保证一次读取文件就能达到目的。

字符集与编码

字符集本身与存储成什么样的字节流无关。Unicode字符集包含了世界上所有的字。
UTF-8表示每次传输8位,UTF-16表示每次传输16位。
UTF-8是变长编码。可以用1-4个字节表示一个字符