1. 抽象基类InputStream、OutputStream,不能实例化。

                               

•      InputStream类是基本的输入类。它定义了所有输入流所需的方法。

•       publicabstract int read() throws IOException

•       publicint read(byte b[]) throws IOException

•      public int read(byte b[],intoffset,int length) throws IOException

功能为从输入流中读数据。这一方法有几种重载形式,可以读一个字节或一组字节。当遇到文件尾时,返回-1。最后一种形式中的offset是指把结果放在b[]中从第offset个字节开始的空间,length为长度。

•      public int available() throwsIOException
输入流共有多少字节可读。注意此方法对InputStream的各派生类不一定都有效,有时会有返回零字节的错误结果。

•      public void close() throwsIOException
关闭输入流并释放资源。虽然java提供垃圾回收机制,当一个流不再使用时可以由运行系统自动关闭,但为了提高程序的安全性和稳定性,建议使用close()关闭。

•      public boolean markSupperted( )
返回布尔值,说明此流能否做标记或复位。

•      public synchronized void mark(intreadlimit)
为当前流做标记。其参数说明在标记失效前可以读多少字节,这个值通常也就设定了流的缓冲区大小。

•      public synchronized void reset()throws IOException
返回到上一次做标记处。

•      public long skip (long n) throwsIOEnception
从输入流跳过几个字节。返回值为实际跳过的字节数

2.  

PublicFileOutputStream(String name)throws FileNotFoundException

PublicFileOutputStream(File file)throws FileNotFoundException


PublicFileOutputStream(String name,Boolean append)throws FileNotFoundException

Name为文件名,file为文件类File对象,append表示文件是否为添加的写入方式,append默认为false,false时为重写方式,即从头写入,覆盖原来文件内容。

 写的方法与读的一样。只不过这里用write。

3.

¯   字节流可以操作任何数据

¯   字符流使用的是字符数组;字节流使用的是字节数组

4.如果文件体积不是很大,可以这样操作。

byte[]buf = new byte[fis.available()];//创建一个刚刚好的缓冲区。但是这有一个弊端,就是文件过大,大小超出jvm的内容空间时,会内存溢出。

fis.read(buf);

System.out.println(new String(buf));

5.   文件类(File)

        一个File类的对象,表示磁盘上的文件和目录。它提供了与平台无关的方法来对磁盘上的文件或目录进行操作,包括:更改文件名、删除文件、列出目录下的文件以及文件对象属性的描述信息等。

ü    构造方法

       public   File(String path);

       public   File(String path,String name);

       public   File(File parent,String chile);

例如:

File f1  = newFile(“data.txt”);

File f2  = newFile(“\\D:”,“data.txt”);

File f3  = newFile(“\\D:”);

File f4  = newFile(f3,“data.txt”);

ü    静态常量

  由于不同操作系统的文件分隔符以及路径分隔符不同,因此,如果要获取当前系统的文件和路径的分隔符,可使用以下两个静态常量。

       publicstatic final char separatorChar;

       publicstatic final char pathSeparatorChar;

       publicstatic final char separator;

ü    其它方法

 (1).访问文件对象:

public StringgetName():返回文件对象名,不包含路径名

public StringgetPath():返回文件路径名,包含对象名

public StringgetAbsolutePath():返回文件绝对路径名,包含对象名

public StringgetParent():返回父文件对象名的路径名

public StringgetParentFile():返回父文件对象

(2)获得文件属性

public longlength();

public Booleanexists():测试指定的文件是否存在

public longlastModified():返回指定文件最后被修改的时间

(3)文件操作

public booleanrenameTo(Filedest):文件重命名

public booleandelete():删除空目录

(4)目录操作

publicboolean mkdir():创建指定目录,正常建立时返回true

publicString[] list():返回目录中的所有文件名字符串

public FilelistFiles():返回指定目录中的所有文件对象

6. 文件的随机访问类  

 对于InputStream类和OutputStream类来说,它们的实例都是顺序访问流,访问从头至尾顺序进行,而且输入流只能读不能写,输出流只能写不能读,即对一个文件不能同时进行读写操作,而RandomAccessFile类提供了另一种称为“随机访问文件”的方式。它有两个特点:

   对一个文件可以同时进行既读又写的操作。

   可以在文件中指定的任意位置读取数据或写入数据。

类声明:

public class PandomAccessFile extends Object implementsDataOutput,DataInput 

    他不是流  

     RandomAccessFile类可以对文件进行随机读写操作。

ü     创建一个RandomAccessFile对象

       RandomAccessFile(File file,String mode) ;

       RandomAccessFile(String name,String mode);

ü    读写数据的常用方法

    读、写基本数据类型: readInt();writeInt(int n)等;

    读、写UTF字符串: readUTF();writeUTF(String str);

    读取文件中的一行: readLine();

ü     文件随机读写流的读取指针控制

long getFilePointer() ---得到当前的文件读取指针。

void seek(long pos) ---把指针从开始移动到pos位置。

long length() ---得到文件的长度(有多少个字节) 。

void setLength(long newLength)

7.对象流分为:对象输入流ObjectInputStream和对象输出流ObjectOutputStream

构造方法:

public ObjectInputStream()throws IOExcepetion,SecurityException

public ObjectInputStream(inputStream in)throws IOExcepetion,SecurityException

   readObject():从ObjectInputStream读取对象。

8.序列化(Serialization)是指并行数据转换成串行数据的处理过程,而对象序列化(Object Serialization)是指把对象的状态数据以字节流的形式进行处理,一般用于实现完全的对象。简单的说序列化可以理解为使用I/O对象流类型实现的对象读写操作。

   Java.io.ObjectOutputStream的writerObject()方法将内存中该对象的状态信息以有序二进制流(0、1序列)的形式输出到目标数据文件中,实现了信息的永久保存,这一工程即所谓的对象序列化。

   对象序列化的主要任务是写出对象的状态信息,并遍历改对象建立一个对其他对象的引用,递归的序列化所有被引用的其他对象。

   注意:并不是任何引用类型的数据(对象)都可以被序列化,只有实现了java.io.Serializable接口的类的对象才可以序列化,这主要出于安全性考虑,一些封装敏感信息或时效性很强的信息的类则不建议支持序列化,以避免出现泄漏或消息失效问题。在java语言规范中规定了Serializable接口的实现类均应该提供无参的构造方法,以供可能的反序列化操作,系统重建对象时自动调用,不过这一规则并未得到严格的贯彻。

在对象序列化的过程中,其所属类的static属性和方法代码是不会被序列化的,因为static属性为整个类共有,不应因一个对象的“沉浮”而受影响,而方法代码是一成不变的,反序列化时只要在运行环境中找到一份其所属的类文件即可(注意必须是当初序列化操作时使用的同一版本.class文件,如果中间进行过修改并重新编译,则反序列化时会出错)对于个别不希望被序列化的非static属性(实例变量),也可以在属性声明时使用transient关键字进行表明。

 在序列化时static和transient属性均被略过,反序列化重构对象时,对象的这些属性被默认初始化和显示初始化处理。其中static属性如果已经存在,则维持原状,不再进行初始化处理。