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个字节表示一个字符。