Java基础--IO流(三)

<span style="font-size:14px;">------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------</span>

File类
一:概述
将文件或者文件夹封装成对象的类
特点:

(1)用来将文件或文件夹封装成对象

(2)方便于对文件与文件夹的属性信息进行操作

(3)File类的实例是不可变的;也就是说,一旦创建,File 对象表示的抽象路径名将永不改变

(4)File对象可以作为参数传递给流的构造函数

(5)了解File类中的常见用法

二:File对象创建

方式一:     
//将a.txt封装成File对象。可以将已有的和未出现的文件或者文件夹封装成对象。
        File f =new File("a.txt");
         方式二:
//将文件所在目录路径和文件一起传入,指定文件路径。
        File f2=newFile("c:\\abc","b.txt");
         方式三:
//将文件目录路径封装成对象。再创建文件对象。降低了文件于父目录的关联性。
        File d=new File("c:\\abc");
        File f3=new File(d,"c.txt");
         注:File.separator表示目录分隔符,可以跨平台使用。相当于路径中的“\”,因为在windows和linux系统中的分隔符不一样
三:File类的常见方法
1.创建
//在指定位置创建文件,如果该文件已经存在,则不创建,返回false。
//和输出流不一样,输出流对象一建立就创建文件。而且文件已经存在,会覆盖。
        boolean createNewFile();
        boolean mkdir();//创建文件夹,只能创建一级文件夹
boolean mkdirs();//创建多级文件夹
例: File dir=new File("abc");
        dir.mkdir();//创建abc这个文件夹
2.删除
        boolean delete();//删除文件或目录。文件存在,返回true;文件不存在或者正在被执行,返回false。                   
        void deleteOnExit();//在程序退出时删除指定文件
3.判断
        boolean canExecute();//是否是可执行文件
        boolean exists();//文件是否存在!!!
        boolean isFile();//是否是文件
        boolean isDirectory();//是否是文件夹
        boolean isHidden();//是否是隐藏文件
        boolean isAbsolute();//文件是否是绝对路径,文件不存在也能判断
记住!!!在判断文件对象是否是文件或者目录时,必须要判断该文件对象封装的内容是否存在。通过exists()方法判断。
4.获取信息
        String getName();//获取文件名
        String getPath();//获取文件的相对路径(即创建的对象传入的参数是什么就获取到什么)         
        String getParent();//获取文件父目录。返回的是绝对路径中的父目录。如果获取的是相对路径,返回null。如果相对路径中有上一层目录,那么该目录就是返回结果。    
        String getAbsolutePath();//获取文件的绝对路径      
        long lastModified();//返回文件最后一次被修改的时间
        long length();//返回文件长度
boolean renameTo(File dest)重新命名此抽象路径名表示的文件,相当于剪切文件 
dest - 指定文件的新抽象路径名 
renameTo例子:
File f1=new File("c:\\Test.java");
File f2=new File("d:\\Test.java");
f1.renameTo(f2);
5.列出文件及文件过滤
        static File[] listRoots();//列出可用的文件系统根目录,即系统盘符,安装程序时候获取有效盘符,或者将特定文件存在指定的系统盘中
String[] list();//列出当前目录下所有文件,包括隐藏文件。调用list方法的file对象必须是封装了一个目录。该目录还必须存在。
        
文件名过滤:
String[]list(FilenameFilter filter);//返回一个字符串数组,获取目录中满足指定过滤器的文件或目录。
//FilenameFilter:文件名过滤器,是一个接口,其中包含一个方法,accept(Filedir,String name),返回的是boolean型,对不符合条件的文件过滤掉。
例子:Day20\FileDemo2.java
  File[] listFiles();//返回一个抽象路径名数组,获取当前文件夹下的所有文件和文件夹
        File[] ListFiles(FilenameFilterfilter);//返回抽象路径名数组,获取目录中满足指定过滤器的文件或目录。

四:递归 

要求:列出指定目录下文件或者文件夹,包含子目录中的内容。也就是列出指定目录下所有内容。
因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可。
在列出过程中出现的还是目录的话,还可以再次调用本功能。
也就是函数自身调用自身。
这种表现形式,或者编程手法,称为递归。

实例1: Day20\FileDemo3.java
实例2:Day20\RemoveDir.java //了解
删除一个带内容的目录。
删除原理:
在window中,删除目录从里面往外删除的。
既然是从里往外删除。就需要用到递归。
实例3:Day20\JavaFileList.java 必须掌握!!!
将一个指定目录下的java文件的绝对路径,存储到一个文本文件中。
建立一个java文件列表文件。
思路:
(1)对指定的目录进行递归。
(2)获取递归过程所以的java文件的路径。
(3)将这些路径存储到集合中。
(4)将集合中的数据写入到一个文件中。
递归要求:
1.限定条件。
2.要注意递归的次数。尽量避免内存溢出。
图示:递归.bmp    递归2.bmp

Properties类
一:概述
Properties是Hashtable的子类,它具备Map集合的特点。而且它里面还有存储的键值对,都是字符串,无泛型定义。
是集合中和IO技术想结合的集合容器。
该对象的特点:
        (1)可用于键值对形式的配置文件
        (2)在加载时,需要数据有固定的格式,常用的是:键=值
  二:特有方法
1.设置

        Object setProperty(String key,String value); //设置键和值,调用Hashtable的方法put

2.获取

        String getProperty(String key); //指定key搜索value

        Set<String> stringPropertyName();//返回属性列表的键集,存入Set集合

3.加载流和存入流

        void load(InputStream ism);//从输入字节流中读取属性列表(键和元素对)。又称将流中的数据加载进集合。
        void load(Readerreader);//从输入字符流中读取属性列表(键和元素对)。又称将流中的数据加载进集合。
        voidlist(PrintStream out);//将属性列表输出到指定的输出流
        void store(OutputStreamout,String comments);//对应load(InputStream )将属性列表(键值对)写入输出流。comments属性列表的描述。
        void store(Writerwriter, String comments);        //对应load(Reader)将属性列表(键值对)写入输出流。comments属性列表的描述。

实例:基础:Day20\PropertiesDemo.java !!!
练习: Day20\RunCount.java !!!掌握
用于记录应用程序运行次数。如果使用次数已到,那么给出注册提示。
分析:
很容易想到的是:计数器。
可是该计数器定义在程序中,随着程序的运行而在内存中存在,并进行自增。
可是随着该应用程序的退出,该计数器也在内存中消失了。
下一次在启动该程序,又重新开始从0计数。
这样不是我们想要的。
程序即使结束,该计数器的值也存在。
下次程序启动在会先加载该计数器的值并加1后在重新存储起来。
所以要建立一个配置文件。用于记录该软件的使用次数。
该配置文件使用键值对的形式。
这样便于阅读数据,并操作数据。

键值对数据是map集合。
数据是以文件形式存储,使用io技术。
那么map+io -->properties.

配置文件可以实现应用程序数据的共享。

打印流

--能保证数据原样性将数据打印出去。而int来说,打印的是最低8位。

一:概述
打印流包括:PrintStream和PrintWriter
        该流提供了打印方法,可将各种类型的数据都原样打印。
  二:字节打印流:PrintStream --OutputStream的子类
构造方法中可接收的参数类型:记住!!!
        1.File对象:File
        2.字符串路径:String
        3.字符输出流:OutputStream
  三:字符串打印流:PrintWriter--非常常用!!!
构造方法中可接受的参数类型
        1.File对象:File
        2.字符串路径:String
        3.字节输出流:OutputStream
4.带参数字节输出流:OutputStream out, boolean autoFlush
        5.字符输出流:Writer
6.带参数字符输出流:Writer writer, boolean autoFlush

实例:Day20\PrintStreamDemo.java

序列流
一:概述
1.SequenceInputStream对多个流进行合并。也被称为合并流。
2.常用构造函数
        SequenceInputStream(Enumeration<?extends FileInputStream> e)
SequenceInputStream(InputStream s1, InputStream s2) 
 二:常见合并多个流文件步骤
        1.创建集合,并将流对象添加进集合
        2.创建Enumeration对象,将集合元素加入。
        3.创建SequenceInputStream对象,合并流对象
        4.创建写入流对象,FileOutputStream关联写入文件
        5.利用SequenceInputStream对象和FileOutputStream对象读数据进行反复读写操作。
示例:Day20\SequenceDemo.java
Day20\SplitFile.java
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值