【1】File 对象 描述文件的信息
File对象内部封装了一个抽象类FileSystem,FileSystem有一个native方法getFileSystem()来获取FileSystem对象
exists() 判断文件或目录是否存在
【2】IO 流
-- 字符流
-- 字符输出流
-- Writer
-- OutputStreamWriter
-- FileWriter(OutputStreamWriter 子类)
-- BufferedWriter
-- PrintWriter 打印流
-- PipedWriter
-- 字符输入流
-- Reader
-- InputStreamReader
-- FileReader(InputStreamReader 子类)
-- BufferedReader
--LineNumberReader
-- PipedReader
-- 字节流
-- 字节输出流
-- InputStream
-- FileInputStream
-- BufferedOutputStream
-- PrintStream 打印流
-- SequenceInputStream 合并流
-- ObjectOutputStream 序列化,要序列化的类必须实现 Serializable 接口
静态成员是不能被序列化的
如果不想被序列化,用关键字 transient
-- PipedOutputStream 管道流
-- 字节输入流
-- OutputStream
-- FileOutputStream
-- BufferedInputStream
-- ObjectInputStream
-- PipedInputStream
-- RandomAccessFile
具体用法见 http://www.iteye.com/blogs/tag/RandomAccessFile
http://blog.csdn.net/akon_vm/article/details/7429245
1. 流操作规律:
1) 确定源和目的
-- 源 :用输入流 InputStream,Reader 及其子类
-- 目的 : 用输出流 OutputStream, Writer 及其子类
2) 确定文件是否为纯文本,确定用字节流还是字符流
3) 确定具体的流对象
4) 使用Buffered对象接收流对象
5) 为了操作方便,因为键盘录入的数据都是字符,所以一般将 System.in 转换成字符流操作.
使用 InputStreamReader
2. IO 流异常处理
FileWriter fw = null;
try
{
fw = new FileWriter("a.txt");
}
catch(Exception e)
{
//异常处理代码 throw new RuntimeException("");
}
finally
{
if(fw!=null)
try
{
fw.close();
}
catch(Exception e)
{
//异常处理代码
}
}
3. buffered:
1) 读取命令行输入的方式:
BufferedReader buf =
new BufferedReader(new InputStreamReader(System.in))
2) BufferedReader 特殊方法 readLine() 读取一行文本
BufferedWriter 特殊方法 newLine() 换行
PS: windows下换行符为 "\r\n"
3) BufferedReader BufferedWriter BufferedInputStream BufferedOutputStream
默认数组大小为8192
private static int defaultBufferSize = 8192;
4) BufferedReader 和 BufferedInputStream 分别有一个子类
LineNumberReader 和 LineNumberInputStream 。 不过 LineNumberInputStream jdk1.1中已过时
LineNumberReader 特殊方法 getLineNumber()和setLineNumber()
4. 字节流
1) InputStream 有一个 available() 方法,返回文件的大小
2) read 方法在读字节的时候会将 byte 提升为 int, 然后做 &255 运算,
write方法写的时候只写最低8位
因为在读取字节的时候可能会遇到11111111连续8个1,即为-1,会导致read读到结束
标记提前结束.
5. 如果要将数据转换为指定的编码表格式保存或者读取,用 InputStreamReader 和 OutputStreamWriter
指定编码表
BufferedWriter bw =
new BufferedWriter(new OutputStreamWriter(new FileOutStream("文件名"),"编码表"))
6. FileReader 和 FileWriter 使用的默认码表
如果要使用其他码表,则需要使用其父类 InputStreamReader 和 OutputStreamWriter
7. System.setIn() System.setOut() 可以改变标准输入输出设备