JavaSE自学笔记整理(八)

来源:互联网 发布:php ajax 跨域 编辑:程序博客网 时间:2024/05/17 13:11

IO流

解决设备与设备之间的数据传输问题    分类:        按照数据流向划分:            输入流            输出流        按照处理的单位划分:            字节流:读取文件的二进制数据,并且不处理二进制数据            字符流:读取文件的二进制数据,并且处理二进制数据成为我们能识别的字符。(读取的数据是以字符为单位的)            字符流 = 字节流+解码
一、File类    可以描述一个文件或者是一个文件夹
1.构造方法:            File(String pathname)                 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。             File(File parent, String child)                 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。             File(String parent, String child)                 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。             注意:File没有无参的构造函数
2.路径:            绝对路径:该文件在硬盘上的完整路径;            相对路径:资源文件相对于当前程序的路径;                    .  当前路径                    .. 上一级路径                        注意:不在同一个盘是不可以写相对路径的            路径中使用的分隔符:                在windows上是\;在lunix上是/;                可以用File.separator获取系统分隔符;                注意:                    windows系统上有两种分隔符\和/;/写一个即可,\需要写两个
3.常用的方法:            创建:                createNewFile() 在指定位置创建一个空文件,成功就返回true,如果已存在就不创建然后返回false                mkdir()         在指定位置创建目录,这只会创建最后一级目录,如果上级目录不存在就抛异常。                mkdirs()        在指定位置创建目录,这会创建路径中所有不存在的目录。                renameTo(File dest) 重命名或者剪切                    重命名文件或文件夹,也可以操作非空的文件夹,文件不同时相当于文件的剪切,剪切时候不能操作非空的文件夹。移动/重命名成功则返回true,失败则返回false。             删除:                delete()        删除文件或一个空文件夹,如果是文件夹且不为空,则不能删除,成功返回true,失败返回false。                deleteOnExit()  在虚拟机终止时,请求删除此抽象路径名表示的文件或目录,保证程序异常时创建的临时文件也可以被删除                两者区别:                    delete是一执行就马上删除                    deleteonExit是jvm退出时才删除            判断:                exists()        文件或文件夹是否存在。                isFile()        是否是一个文件,如果不存在,则始终为false。                isDirectory()   是否是一个文件夹,如果不存在,则始终为false。                isHidden()      是否是一个隐藏的文件或是否是隐藏的目录。                isAbsolute()    测试此抽象路径名是否为绝对路径名。            获取:                文件相关                    getName()       获取文件或文件夹的名称,不包含上级路径。                    getPath()       返回绝对路径,可以是相对路径,但是目录要指定                    getAbsolutePath()   获取文件的绝对路径,与文件是否存在没关系                    length()        获取文件的大小(字节数),如果文件不存在则返回0L,如果是文件夹也返回0L。                    getParent()     返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回null。                    lastModified()  获取最后一次被修改的时间。                文件夹相关:                    staic File[] listRoots()    列出所有的根目录(Window中就是所有系统的盘符)                    list()                      返回一个字符串数组,该数组存储目录下的文件或者目录名,包含隐藏文件。对于文件这样操作会返回null。                    list(FilenameFilter filter) 返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。                    listFiles()                 返回一个抽象路径名数组,存储文件或者目录对象(File类实例),包含隐藏文件。对于文件这样操作会返回null。                    listFiles(FilenameFilter filter)    返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。                        注:FilenameFileter主要是过滤文件名,只有一个方法:                           accept(File dir, String name) //可以通过正则表达式来过滤文件:name.maches(正则表达式)
二、字节流
1.输入字节流:InputStream            InputStream是所有输入字节流的超类,是抽象类            1.1 FileInputStream                FileInputStream是InputStream的直接子类,是读取文件数据的字节输入流                使用步骤:                    1.找到文件                    2.建立数据通道                    3.读取数据:read()                    4.释放资源            1.2 BufferedInputStream                BufferedInputStream是缓冲输入字节流,内部维护了一个8kb的字节数组                使用步骤:                    1.找到目标文件                    2.建立数据流入通道                    3.建立缓冲输入字节流                    4.关闭通道
2.输出字节流:OutputStream            OutputStream是所有输入字节流的超类,是抽象类            2.1 FileOutputStream                FileOutputStream是OutputStream的直接子类,是读取文件数据的字节输入流                使用步骤:                    1.找到文件                    2.创建文件字节输出流                    3.写出文件:write()                    4.关闭资源                注意事项:                    1.使用FileOutputStream写入数据时,如果目标文件不存在,则自动创建该文件                    2.使用FileOutputStream写入数据时,如果目标文件已经存在,则会先清空目标文件的数据再写入                    3.使用FileOutputStream写入数据时,如果目标文件已经存在,需要在原来的数据基础上再添加新数据则需使用FileOutputStream(File file, boolean append)构造方法。append为true4.使用write方法写出一个int类型的数据,会自动舍弃32位,只保留后八位             2.2 BufferedOutputStream                BufferedInputStream是缓冲输出字节流,内部维护了一个8kb的字节数组                使用步骤:                    1.找到目标文件                    2.建立数据输出通道                    3.建立缓冲输出字节流                    4.调用bufferedoutputstream的flush方法
三、字符流
1.输入字符流:Reader            Reader是所有输入字符流的超类,是抽象类            1.1 FileReader                FileReader是Reader的直接子类,是读取文件字符流                使用步骤:                       1.读取文件                    2.建立字符流通道                    3.读取文件字符数据                    4.关闭字符流通道            1.2 BufferedReader                BufferedReader是缓冲输入字符流,内部维护了8192的字符数组                使用步骤:                    1.找到目标文件                    2.建立数据流入通道                    3.建立缓冲输入字符流                    4.读入文件内容                    5.关闭通道
2.输出字符流:Writer            Writer是所有输出字符流的超类,是抽象类            2.1 FileWriter                FileWriter是Writer的直接子类,是输出文件字符流                使用步骤:                       1.读取文件                    2.建立字符流通道                    3.写出数据                    4.关闭字符流通道            2.2 BufferedWrite                BufferedWrite是缓冲输出字符流,内部维护了8192的字符数组                使用步骤:                    1.找到目标文件                    2.建立数据流出通道                    3.建立缓冲输出字符流                    4.写入文件内容                    5.关闭通道                 注意:BufferedWrite拓展了newline的功能(就是回车换行)
三、转换流        InputStreamReader是字节流通向字符流的桥梁        OutputStreamWriter是字符流通向字节流的桥梁
四、序列流        序列流也称为合并流,是用来对两个流进行合并的        构造方法:            SequenceInputStream(InputStream s1, InputStream s2)   //合并两个流            SequenceInputStream(Enumeration<? extends InputStream> e    //合并多个流,vector集合的elements()方法返回Enumeration迭代;
五、打印流        1.PrintStream:字节打印流            构造函数可以接收的数据类型:                1.字符串路径。                2.File对象。                3.OutputStream        2.PrintWrite:字符打印流            构造函数可以接收的数据类型:                1,字符串路径。                2File对象。                    对于12类型的数据,还可以指定编码表。也就是字符集。                3OutputStream                4,Writer                    对于34类型的数据,可以指定自动刷新。
六、对象的序列化与反序列化        对象的序列化:   将内存中的对象直接写入到文件设备中            ObjectOutput:接口                writeObject(Object obj)  //将对象写入底层存储或流。            实现类:ObjectOutputStream        对象的反序列化: 将文件设备中持久化的数据转换为内存对象            ObjectInput:接口                readObject()  //读取并返回对象。            实现类:ObjectInputStream        注意:            1.对象信息必须实现serializable接口,才能写到文件中,serizabale接口没有任何实现方法,只是标识作用            2.反序列化创建对象时不调用构造方法            3.反序列化时jvm会计算出该类的serialVersionUID,然后与本地的class文件的serialVersionUID对比,如果一样则反序列化成功            4.改变成员变量则serialVersionUID也会改变,但是本地的serialVersionUID不会改变,导致反序列化失败                解决方法:在该类中直接指定serialVersionUID即可            5.如果某个成员变量不想写到硬盘上,可以用transient修饰,即可跳过
七、Properties        Properties集合是配置文件类,主要生成配置文件和读取配置文件        体系:            Map--->Hashtable--->Properties        主要方法:            setProperties(key,value)    添加配置信息            store()     生成配置文件    //使用该方法存储时,会带着当时存储的时间。            load()      读取配置文件        注意:            1.如果配置信息一旦使用了中文,用store方法生成配置文件时,要用字符流解决,如果用字节流解决,则出现乱码,因为使用的是iso8859-1编码            2.如果修改配置文件信息,使用setproperties后再重新用store方法写入文件
八、编码        1.常见的码表:            ASCII:      美国标准信息交换码、用一个字节的7位可以表示。            ISO8859-1:  拉丁码表。以ASCII码表为基础。            GB2312: 中文码表。英文占一个字节,中文占2个字节。            GBK:        中国的中文编码表升级,融合了更多的中文文字符号。            UTF-8:      万国码表、英文存的是1个字节,中文存的是3个字节。           2.编码:            字符串--->字节数组            String类的getBytes()方法进行编码,将字符串,转为对映的二进制,并且这个方法可以指定编码表。                注意:如果没有指定码表,该方法会使用操作系统默认码表,可以通过System.getProperty("file.encoding")查询当前系统的码表。        3.解码:            字节数组--->字符串            String类的构造函数完成。                String(byte[] bytes)    使用系统默认码表                String(byte[],charset)  指定码表
九、 装饰者模式        目的:增强一个类的功能,而且可以让这些装饰类互相装饰        步骤:            1. 在装饰类的内部维护一个被装饰类的引用。            2. 让装饰类有一个共同的父类或者是父接口。        继承实现的增强与装饰者模式实现的增强的区别:                  继承实现的增强类:                优点:代码结构清晰,而且实现简单                缺点:对于每一个的需要增强的类都要创建具体的子类来帮助其增强,这样会导致继承体系过于庞大。            修饰模式实现的增强类:                优点:内部可以通过多态技术对多个需要增强的类进行增强                缺点:需要内部通过多态技术维护需要增强的类的实例。进而使得代码稍微复杂。
十、递归        函数的自身调用了自身          使用前提:必须要有情况的条件下调用,要不然就是个死循环
0 0
原创粉丝点击