黑马程序员_学习日记十_IO二

来源:互联网 发布:windows阻止软件安装 编辑:程序博客网 时间:2024/05/26 05:53

---------------------- android培训java培训、期待与您交流! ----------------------

 

File概述

    在java的io包中还存在这File类,这个类是文件和目录路径名的抽象表现形式,用来将文件或者文件夹封装成对象的,方便对文件和文件夹的属性信息进行操作。

构造方法:

    1.File(StringpathName),该方法将指定的文件封装成file对象,并且可以将已有的和未存在的文件或者文件夹封装成对象。

    2.File(Stringparent, String child),在指定的parent路径下,将指定的文件child封装成对象。

    3.File(File parent, String child),将路径名也封装成对象,并将该路径下的指定文件child封装成对象。

File对象功能-创建和删除

    File类的常见方法:

    创建方法:

    1.boolean createNewFile(),在指定位置创建一个文件,如果创建成功,返回true,如果文件该文件已经存在,则不创建,返货false。

    2.boolean mk dir(),创建一级目录,注意,只能创建一级目录。创建成功,返回true。

    3.boolean mkdirs(),创建多级目录,创建成功,返回true。

    删除方法:

    1.boolean delete(),删除指定位置的文件,如果文件存在,则删除并返回true,如果不存在,则返回false。

    2. voiddeleteOnExit(),在程序退出时删除指定文件。

File对象功能-判断

    判断方法:

    1.booleancanExecute(),测试辞路径下的文件是否可执行,如果能,就返回true,否则就返回false。

    2.intcompareTo(File pathName),按字母顺序比较指定路径下的文件名。

    3.booleanexists(),判断指定路径下的文件是否存在。

    4.booleanisFile(),判断此抽象文件对象是否是一个标准的文件。

    5.booleanisDirectory(),判断此抽象文件对象是否是一个目录。

    6.booleanisHidden(),判断此抽象路径名指定的文件是否是一个隐藏文件。

File对象功能-获取

    获取方法:

    1.String getName(),返回此抽象路径名表示的文件或目录的名称。

    2.StringgetPath(),将此抽象路径名转换为一个路径名字符串。

    3.StringgetParent(),返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回null

    4.FilegetAbsoluteFile(),返回此抽象路径名的绝对路径名并封装成了File对象。

    5.StringgetAbsolutePath(),返回此抽象路径名的绝对路径名字符串。

    6.long lastModified(),返回此抽象路径名表示的文件最后一次被修改的时间。

    7.longlength(),返回由此抽象路径名表示的文件的长度。

    8.boolean reNameTo(),重新命名此抽象路径名表示的文件。

    上述方法都能够获取文件的相应信息。

文件列表

    1.static File[] listRoots(),列出所有可用的文件系统根。

    2.String[] list(),返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。

    3.String[] list(FileNameFilter filter),返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。

    4.File[] listFiles(),返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。

Properties简述

    Properties类是HashTable类的子类,也就是说Properties具备Map集合的特点,而且该类对象里面存储的键值对都是字符串。Properties对象可保存在流中或从流中加载。因为Properties 类继承于 Hashtable,所以可对Properties 对象应用 put()putAll()方法。但不建议使用这两个方法,因为它们允许调用者插入其键或值不是String 的项。相反,应该使用setProperty() 方法往该对象中存储键值对。

    Properties类是集合和IO技术相结合的容器,该对象的特点是可以用于键值对形式的配置文件。在加载数据时,需要数据有固定格式:键=值。

Properties存取

    存取方法:

    ObjectsetProperties(String K, String V),调用HashTable的put()方法,向集合对象中存储键值对,并且键和值都是String类型的。

    取出方法:

    1.StringgetProperties(String key),用指定的键在此属性集合中搜索属性并返回。

    2.Set<String> stringPropertyNames(),返回此属性集合中的键集并保存在一个Set集合当中。其中该键及其对应值是字符串。

Properties存取配置文件

    在Properties集合中提供了这些方法:

    1.voidload(Reader reader),该方法可以从指定的输入字符流中读取属性集合。

    2.voidlist(PrintStream out),该方法可以将属性集合输出到指定的输出流。

    3.void store(OutputStream out,String comments),将此属性集合中的键和值写入流输出。 

PrintWriter

    该流提供了各种数据类型重载的打印方法,可以将各种不同的数据类型数据原样打印。

    PrintWriter类和PrintStream类操作的数据对象不同,PrintWriter是字符打印流,PrintStream是字节打印流。PrintWriter类(字符打印流)构造方法可以接收多种类型的参数:

    1.PrintWriter(Filefile)

    2.PrintWriter(StringFileName)

    3.PrintWriter(OutputStreamout)

    4.PrintWriter(Writerout)

    PrintStream类(字节打印流)的构造方法也可以接收多种类型的参数:

    1.PrintStream(Filefile)

    2.PrintStream(StringfileName)

    3.PrintStream(OutputStreamout)

合并流-SequenceInputStream

    SequenceInputStream类是InputStream类的子类,该类表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。

    构造方法:

         SequenceInputStream(Enumeration<?Extends InputStream> e),通过记住参数来初始化新创建的SequenceInputStream

    需要先定义一个Vector类型的集合对象,将需要连接的字节输入流对象添加到该集合中。然后再通过Vector集合特有的Enumeration遍历方式产生的对象作为参数传递给SequenceInputStream类的构造方法产生SequenceInputStream类对象。再调用该对象的读取方法read()获取连接流对象中的数据。

 对象的序列化

    ObjectOutputStream类:ObjectOutputStream将 Java 对象的基本数据类型和图形写入OutputStream。可以使用ObjectInputStream读取(重构)对象。通过在流中使用文件可以实现对象的持久存储。

    ObjectInputStream类:ObjectInputStream对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化,   ObjectInputStream 用于恢复那些以前序列化的对象。

    Serializable接口:类通过实现java.io.Serializable 接口以启用其序列化功能,未实现此接口的类将无法使其任何状态序列化或反序列化。可序列化类的所有子类型本身也都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义。想要被序列化的对象都要实现Serializable接口。

    可以用语句:

    static final long serialVersionUID = 42L;
需要被序列化的类中定义一个固定的UID,即使类被改写了还是能够将原对象反序列化。

PipedInputStream-管道流

    PipedInputStream类:管道输入流应该连接到管道输出流;管道输入流提供要写入管道输出流的所有数据字节。通常,数据由某个线程从PipedInputStream对象读取,并由其他线程将其写入到相应的PipedInputStream。不建议对这两个对象尝试使用单个线程,因为这样可能死锁线程。管道输入流包含一个缓冲区,可在缓冲区限定的范围内将读操作和写操作分离开。

    PipedOutputStream类:可以将管道输出流连接到管道输入流来创建通信管道。管道输出流是管道的发送端。通常,数据由某个线程写入PipedInputStream 对象,并由其他线程从连接的PipedInputStream 读取。不建议对这两个对象尝试使用单个线程,因为这样可能会造成该线程死锁。

RandomAccessFile

    RandomAccessFile类:该类不是IO体系中的子类,而是直接继承自Object类,但是他是IO包中的成员,因为它具备读取和输出功能,内部封装了一个数组,而且通过指针对数组的元素进行操作,可以通过long getFilePointer ()方法来获取指针位置,同时可以通过void seek(longposition)方法来改变指针的位置。此类的实例支持对随机访问文件的读取和写入。

    该类完成读取和输出的原理就是该类内部封装了字节输入流和输出流。

    通过构造方法:

        RandomAccessFile(String fileName,String mode);

    可以看出,该类只能操作文件数据,而且操作文件数据还有一定的模式,第二个参数只能接受“r”、“rw”、“rws”、“rwd”四个值。如果模式为只读“r”,不会创建文件,而会读取一个已存在的文件,如果该文件不存在,则会报异常。如果模式为读写“rw”,并且如果文件不存在,会自动创建文件,如果存在,则不会覆盖。

ByteArrayStream

    ByteArrayInputStream类和ByteArrayOutputStream类是可以直接操作字节数组中数据的流对象。这两个类由于没有调用底层资源,所以其流对象调用close()方法无效,此类的方法在关闭流对象之后仍然可以调用,而不会产生任何IO异常。

    ByteArrayInputStream类在实例化对象的时候需要接收数据源而且数据源是一个字节数组。

    ByteArrayOutputStream类在实例化对象的时候不用定义数据目的,因为该类的构造方法已经在内部封装了一个可变长度的字节数组。这就是数据目的。

    因为这两个流对象操作的都是数组,并没有调用系统资源,所以不必调用close()方法关闭流对象。

    介绍ByteArrayOutputStream类的一个特殊方法:

    voidwrite(OutputStream out),将此byte数组输出流的全部内容写入到指定的输出流参数中,这与使用out.write(buf, 0,count) 调用该输出流的 write 方法效果一样。但是,这个方法会抛出IO异常,所以在调用这个方法的时候,一定要有IO异常处理。

    同样,对字符和字符串也有相应的流处理类,CharArrayReader类和CharArrayWriter类、StringReader类和StringWriter类。

转换流的字符编码

    字节和字符之间的转换主要是通过OutPutStreamWriter类和InputStreamReader类来完成的。

    编码表:由于计算机只能识别二进制数据,为了可以让它可以识别各个国家的文字,就将各个国家的文字用二进制数字来表示,并一一对应,就形成了一张表,这就是编码表。

 

---------------------- android培训java培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima

原创粉丝点击