IO流

1)IO流分为字节流和字符流。

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)     BufferedWriter提供带缓冲的字符流(实际上FileWriter也带缓冲区,BufferedWriterFileWriter默认的缓冲区要大,并且效率要高)

2)     BufferedWriternewLine()方法,提供了跨平台的换行符。

3)     BufferedReader提供了readLine()方法,可以每次读取一行数据,方法返回null说明已读到文件末尾。注意:readLine()方法返回的时候只返回回车符之前的数据内容,并不返回回车符。

4)     BufferedReader子类LineNumberReader提供了两个获取和设置当前行号的方法,setLineNumber()getLineNumber()

5)     Properties具备Map集合的特点,里面存储字符串形式的键值对,是集合中与IO相结合的容器,可以用于键值对形式的配置文件,在加载数据时,需要数据有固定格式:键=值。

字节流

1)     FileOutputStream不同于FileWriter,它不存在默认的缓冲区,即每次调用Write()都会写入文件。

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)ObjectOutputStreamObjectInputStream用于实现对象的序列化与反序列化,writeObject(Objectobj)用于写入对象,readObject()用于读取对象。

4)如果使用序列化机制向文件中写入了多个Java对象,则使用反序列化机制恢复对象时必须按实际写入的顺序读取。

5)对象的类名、Field(包括基本类型、数组、对其他对象的引用)都会被序列化;方法、staticFiledtransientField都不会被序列化

6)反序列化对象时必须有序列化对象的class文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值