2)字节流的抽象基类:InputStream,OutputStream
3)字符流的抽象基类:Reader,Writer
5)标准IO异常处理方式:
public static void main(String[] args){
FileWriter fw=null;
try{
fw=new FileWriter(文件路径名);
fw.write(“abcdefg”);
}catch(IOException e){
System.out.println(e);
}finally{
try{
if(fw!=null){
fw.close();
}
}catch(IOExceptione){
System.out.println(e);
}
}
}
6)如果过滤流包装了节点流,那么在关闭流操作时,只需close()最上层的过滤流,系统会自动关闭过滤流所包装的节点流。
7)获取键盘输入最常见写法:
BufferedReader input=new BufferedReader(newInputStreamReader(System.in));
9)ByteArrayInputStream|ByteArrayOutputStream,CharArrayReader|CharArrayWriter,StringReader|StringWriter通过以内存作为原设备和目的设备来操作流,没有使用系统资源,不需要close()。
10)RandomAccessFile既可以读取文件内容,也可以向文件输出数据,与普通输入|输出流不同的是,它可以直接跳转到文件的任意地方来读写数据。
RandomAccessFile包含了如下方法来操作文件记录指针:
a)long getFilePointer():返回文件记录指针的当前位置。
b)void seek(long pos):将文件记录指针定位到pos位置。
注意:RandomAccessFile如果直接将文件记录指针移动到中间某位置后开始输出,则新输出的内容会覆盖文件中原有的内容。
字符流
1)
2)
3)
4)
5)
字节流
1)
2)
FileInputStream fis=newFileInputSream(“test.txt”);
byte[] buffer=newbyte[fis.available()];
//定义一个刚刚好的缓冲字节数组,不用在循环
//小文件可以使用该方法,文件过大则占用内存过多,不宜使用。
fis.read(buffer);
System.out.println(newString(buffer));
fis.close();
File类
1)createNewFile()在指定位置创建文件,如果该文件已经存在,则不创建,返回false;和输出流不一样,输出流对象一建立就创建文件,而且文件已经存在,会覆盖。
3)所谓递归,就是方法调用自身。递归要注意:
a)一定要有一个出口,让递归结束。
b) 要注意递归的次数,尽量避免内存溢出。
4)通过File类的boolean renameTo(File dest)方法可以巧妙的实现移动(剪切)文件。
序列化
1)一个类若想被序列化,则需要实现java.io.Serializable接口,该接口是一个标识性接口,没有定义任何方法。
2)如果想使某个变量无法序列化,可使用transient关键字修饰该变量。注意:transient关键字只能修饰Field,不可修饰Java程序中的其他成分。
3)ObjectOutputStream和ObjectInputStream用于实现对象的序列化与反序列化,writeObject(Objectobj)用于写入对象,readObject()用于读取对象。
4)如果使用序列化机制向文件中写入了多个Java对象,则使用反序列化机制恢复对象时必须按实际写入的顺序读取。
5)对象的类名、Field(包括基本类型、数组、对其他对象的引用)都会被序列化;方法、staticFiled、transientField都不会被序列化。
6)反序列化对象时必须有序列化对象的class文件。