黑马程序员——java基础拾遗之IO流(二)File 和 Properties的使用


------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一.File类

   java.io.File类用来描述文件和文件夹,可以用来操作文件、文件夹及它们的相关属性,可以作为参数传给流的构造函数;

常用常量File.separator是跨平台的目录分割符。

常用的初始化方法:


<span style="font-size:14px;">File f1 = new File("a.txt");//用文件名初始化
File f2 = new File("D:"+File.separator+"java", "a.txt");//用路径加文件名初始化
File f3 = new File(new File("D:"+File.separator+"java"), "a.txt");//同f2</span>

File的基本操作

(1)创建

createNewFile()在指定位置创建文件,存在则不创建,创建以后返回true,否则返回false
mkdir()/mkdirs() 创建文件夹,后者可以根据路径创建多级目,创建以后返回true,否则返回false

(2)删除

delete() 删除成功返回true,否则返回false
deleteOnExit()虚拟机停止的时候删除。可以在File刚初始化的时候执行。

(3)判断

canExecute()是否能执行
exists()判断文件或者目录是否存在
isDirectory()判断是否是目录
isFile() 判断是否是文件
isAbsolute() 判断路径是否绝对路径


注意:判断File是目录还是文件的时候一般先判断exists()否则都会返回false

(4)获取信息

File 有很多get开头方法,都是用来获取File的信息的。
getName()获取文件或者目录名
getParent() 返回父目录的路径名
getPath() 获取路径名字符串
getAbsolutePath()  获取绝对路径名
lastModified() 获取最后修改时间
length() 获取文件大小

注意:getPath() 和 getAbsolutePath() 区别的是在初始化File的时候,如果使用相对路径初始化,getPath()返回的是相对路径,但是getAbsolutePath()返回绝对路径。
getParent()File 初始化的时候要指定文件的上级目录才会返回,否则返回null,例如C:\\abc\\a.txt,或者abc\\a.txt。


(5)获取文件列表

1)列出C盘下所有文件
示例代码:
<span style="font-size:14px;">            /**
	     * 
	     * 功能描述:列出C盘下所有文件
	     * @param args
	     */
	    public static void main(String[] args) {
	        File f = new File("c:\\");
	        String[] names = f.list();
	        for(String name : names){
	            System.out.println(name);
	        }
	    }</span>

注意:当File指定的是一个文件的时候,list()方法返回的是null

2)带过滤器的获取文件列表方法
<span style="font-size:14px;">    /**
     * 
     * 功能描述:文件列表过滤器,列出指定目录下的所有.java文件
     * @param args
     */
    public static void main(String[] args) {
        File f = new File("d:\\");
        //File[] files = f.listFiles();//返回封装好的File
        String[] names = f.list(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {//dir目录,name文件名
                return name.endsWith(".java");
            }
        });
        for(String name: names){
            System.out.println(name);
        }
    }</span>
    
    此处用匿名内部类的方式用FilenameFilter给返回的文件列表指定了返回的规则,即.java后缀的文件名才能被过滤
    
    注意:返回封装好的File[]的listFiles()方法也有对应的过滤器,用法相同;
    
    3)递归遍历一个目录下面的所有文件
    示例代码:遍历D盘下面所有的文件

<span style="font-size:14px;">    public static void main(String[] args) {
        File f = new File("d:\\");
        showAllFile(f);
    }
    
    /**
     * 
     * 功能描述:遍历指定文件夹下面的所有文件
     * @param args
     */
    public static void showAllFile(File dir){
        System.err.println(dir);
        File[] files = dir.listFiles();
        if(dir.isDirectory() && null != files){
            for(File f: files){
                if(f.isDirectory()){
                    showAllFile(f);
                }else{
                    System.err.println(f);
                }
            } 
        }
    }</span>
    
    当指定的File是一个文件的时候dir.listFiles()返回的是null
    
    4)递归删除指定目录下的所有文件,遵循先删除文件,后删除目录
    
<span style="font-size:14px;">    /**
     * 功能描述:递归删除指定目录下的所有文件
     * @param args
     */
    public static void main(String[] args) {
        File f = new File("d:\\aaa");
        removeDir(f);
    }
    
    public static void removeDir(File dir){
        File[] files = dir.listFiles();
        if(null != files){
            for(File f: files){
                if(f.isDirectory()){
                    removeDir(f);
                }else{
                    f.delete();
                }
            }
            //删除文件夹下所有文件后,再把文件夹也删除
            dir.delete();
        }
    }</span>


二.Properties 类

java.util.Properties 类是Hashtable的子类,有map 的特点,里面存储以字符串形式存在的键值对,
是集合和IO结合的产物,常用来操作配置文件。
    

     常用的方法有:


    getProperty(String key) 获取元素值
    setProperty(String key, String value) 设置元素值
    load(InputStream inStream) 和流相结合读取配置文件
    store(OutputStream out, String comments) 和流结合,存储Properties的信息
    stringPropertyNames() 获取所有键,返回set集合。
    
    getProperty(String key)和setProperty(String key, String value)方法都很简单,
    
    下面主要总结load、store、stringPropertyNames的用法:

    getProperty(String key) 获取元素值
    setProperty(String key, String value) 设置元素值
    load(InputStream inStream) 和流相结合读取配置文件
    store(OutputStream out, String comments) 和流结合,存储Properties的信息
    stringPropertyNames() 获取所有键,返回set集合。
    
    getProperty(String key)和setProperty(String key, String value)方法都很简单,
    
    下面主要总结load、store、stringPropertyNames的用法
    
    1)stringPropertyNames 遍历所有Properties的键值对
    示例代码
    
<span style="font-size:14px;">    public static void main(String[] args) {
        Properties p = new Properties();
        p.setProperty("red", "红色");
        p.setProperty("blue", "蓝色");
        Set<String> ps = p.stringPropertyNames();
        for(String prop : ps){
            System.err.println("key:"+prop+" value:"+p.getProperty(prop));
        }
    }</span>

    这里可以看出Properties对象的键值操作和map是一样的
    
    2)load(InputStream inStream) 读取配置文件,用流和文件关联,再用load进行读取;
    
    示例代码
    
    
<span style="font-size:14px;">    public static void main(String[] args) throws Exception{
        Properties p = new Properties();
        FileInputStream fi = new FileInputStream("Properties.properties");
        p.load(fi);
        Set<String> ps = p.stringPropertyNames();
        for(String prop : ps){
            System.err.println("key:"+prop+" value:"+p.getProperty(prop));
        }
    }</span>
    
    这里Properties的对象读取了文件Properties.properties中的内容,之后将读取到的内容遍历打印
    
    3)store(OutputStream out, String comments) 方法用来存储Properties信息,和流相结合
    示例代码
    
<span style="font-size:14px;">    public static void main(String[] args) throws Exception {
        Properties p = new Properties();
        FileOutputStream fo = new FileOutputStream("Properties.properties");
        p.setProperty("aaa", "1");
        p.setProperty("bbb", "2");
        p.setProperty("ccc", "3");
        p.store(fo, "");
    }</span>
    
    comments参数是注释,即输出文件中#开头的注释,这个参数可选
    

    查看文件Properties.properties,可以看出里面的内容已经变成了


#
#Thu Aug 21 22:52:56 CST 2014
bbb=2
aaa=1
ccc=3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值