黑马程序员——Java基础——File、Properties类

File类

File类概述

将文件或者文件夹封装成对象,方便对文件或者文件夹的属性信息进行操作来弥补流类的不足
分隔符 String separat
File类对象方法_创建,删除,判断,获取信息
1. 创建

boolean createNewFile();

在指定位置创建文件,如果该文件已经存在,则不创建。和输出流不同

static File creatTempFile(String 前缀名, String 后缀名, File 存放地址);

在指定位置创建临时文件

boolean mkdir();

只能创建一级文件夹

boolean mkdirs();

创建多级文件夹
2. 删除

boolean delete();

删除失败返回false

void deleteOnExit();

File f = new File("file.txt");
f.deleteOnExit();

使用中的文件不能被删除,可使用此方法,表示当退出时删除此文件

3. 判断

boolean canExecute();

判断文件是否可执行

int compareTo(File 路径);

按照字母顺序比较两个抽象路径名

boolean exists();

判断文件是否存在

boolean isDirectory();

判断是否是目录

boolean isFile();

判断是否是文件
//在使用isDirectory();或isFile();方法时,必须要先通过exists();方法判断该File对象封装的内容是否存在

boolean isHidden();

判断是否是隐藏文件

boolean isAbsolute();

判断是否是绝对路径
4. 获取信息

String getName();

获取文件名

String getPath();

获取文件目录

String getParent();

获取文件上一层目录,封装的对象中如果没有,则返回null

String getAbsolutePath();

获取文件绝对路径

File getAbsolutePath();

获取文件绝对路径

long lastModified();

获取最后一次修改时间

long length();

获取文件大小

boolean renameTo();

在同目录下实现改名称功能,在不同目录下类似于剪切复制功能
File类对象方法_文件列表

static File[] listRoots();

列出机器里面有效的盘符

String[] list();

返回指定目录下的文件及文件夹名称(包含隐藏文件),如果指定的对象为文件则返回null

String[] list(FilenameFilter Filter);

返回指定目录下符合筛选条件的文件及文件夹名称

File[] listFile();

返回指定目录下的文件及文件夹对象(包含隐藏文件),如果指定的对象为文件则返回null

File[] listFile(FilenameFilter filter);

返回指定目录下符合筛选条件的文件及文件夹对象

练习:用String[] list(FilenameFilter Filter)方法,返回所有后缀是.JAVA的文件

public class TestFileMethod_3 {
    public static void main(String[] args){
        File dir = new File("d:\\test");
        String[] arr = dir.list(new FilenameFilter(){
            public boolean accept(File dir, String name) {
                /*if(name.endsWith(".java"))
                    return true;
                else
                    return false;
                */
                return name.endsWith(".java");
            } 
        });
        for(String name: arr){
            System.out.println(name);
        }
    }
}

列出目录下所有的内容

/*
递归:程序调用自身的编程技巧称为递归(recursion)
    1. 限定条件
    2. 注意递归的次数,避免内存溢出
*/
public static void main(String[] args){
    File f = new File("d:\\test");
    showDir(f, 0);
}
public static String getLevel(int level){
    StringBuilder sb = new StringBuilder();
    for(int x=0; x<level; x++){
        sb.append("|--");
    }
    return sb.toString();
}
public static void showDir(File dir, int level){
    System.out.println(getLevel(level) + dir.getName());
    level++;
    File[] files = dir.listFiles();
    for(File temp : files){
        if(temp.isDirectory()){
            showDir(temp, level);
        }else
            System.out.println(getLevel(level) + temp.getName());
    }
}

删除带内容的目录
删除原理:在windows中,删除目录从里面往外删除
从里往外删除,就需要用到递归

public static void removeDir(File dir){
    File[] files = dir.listFiles();
    for(File temp: files){
        if(temp.isDirectory())
            removeDir(temp);
        else
            System.out.println(temp.toString() +"::file::" + temp.delete());
    }
    System.out.println(dir + "::dir::" + dir.delete());
}

创建java文件列表

/*
遍历指定目录,创建一个java文件清单
思路:
    1. 对指定的目录进行递归
    2. 获取递归过程中java文件的路径
    3. 将这些路径存储到集合中
    4. 将集合中的数据写入到文件中
*/
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class JavaFileList {
    public static void main(String[] args) throws IOException{
        File dir = new File("d:\\test");
        List<File> list = new ArrayList<File>();
        fileToList(dir, list);
        System.out.println(list.size());
        File jlf = new File(dir, "JavaList.txt");
        writeToFile(list, jlf);
    }
    public static void fileToList(File dir, List<File> list){
        File[] files = dir.listFiles();
        for(File temp: files){
            if(temp.isDirectory())
                fileToList(temp, list);
            else{
                if(temp.getName().endsWith(".java"))
                    list.add(temp);
            }       
        }
    }
    public static void writeToFile(List<File> list, File jlf) throws IOException{
        BufferedWriter bufw = null;
        try{
            bufw = new BufferedWriter(
                        new FileWriter(jlf));
            for(File f: list){
                String path = f.getAbsolutePath();
                bufw.write(path);
                bufw.newLine();
                bufw.flush();
            }
        }catch(IOException e){
            throw e;
        }finally{
            try{
                if(bufw != null)
                    bufw.close();
            }catch(IOException e){
                throw e;
            }
        }
    }
}

Properties类

Properties类是hashtable的子类,具有map集合的特点,对象中存储的键值对都是字符串
是集合中和IO技术相结合的集合容器,可以用于键值对形式的配置文件,在加载数据时,需要数据有固定的格式
Properties类存取配置文件

import java.util.Properties;
import java.util.Set;
public class PropertiesDemo {
    public static void main(String[] args){
        setAndGet();
    }
    //设置和获取元素
    public static void setAndGet(){
        Properties prop = new Properties();
        prop.setProperty("张三", "30");
        prop.setProperty("李四", "40");
        //System.out.println(prop);
        String value = prop.getProperty("李四");
        System.out.println(value);
        prop.setProperty("张三", 100+"");
        Set<String> names = prop.stringPropertyNames();
        for(String temp: names){
            System.out.println(temp + "::" + prop.getProperty(temp));
        }
    }
}

将info.txt中键值数据存到集合中进行操作
1. 用一个流和info.txt文件关联
2. 读取一行数据,将该行数据用“=”号分割
3. “=”左边为建,右边为值, 存到Properties集合中即可

public static void method_1(String src) throws IOException{
    //Properties类load方法原理
    BufferedReader bufr = 
            new BufferedReader(
                    new FileReader(src));
    String line = null;
    Properties prop = new Properties();
    while((line = bufr.readLine()) != null){
        String[] arr = line.split("=");
        //System.out.println(line);
        prop.setProperty(arr[0], arr[1]);
    }
    bufr.close();
    System.out.println(prop);
}
public static void loadDemo() throws IOException{
    Properties prop = new Properties();
    FileInputStream fis = new FileInputStream("d:\\test\\info.txt");
    prop.load(fis);
    //System.out.println(prop);
    prop.setProperty("lee", 39+"");
    prop.list(System.out);
    FileOutputStream fos = new FileOutputStream("d:\\test\\info.txt");
    prop.store(fos, "change");  
    fos.close();
    fis.close();
}
Properties类练习:

dom4j 方便快捷的读取文件信息的类

/*
用于记录应用程序运行次数
如果使用次数已到,给出注册提示
该配置文件使用键值对的形式(map集合),便于阅读数据并操作数据。
数据是以文件形式存储,使用io技术
map + io --> Properyies
*/      
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
public class RunCount {
    public static void main(String[] args) throws IOException{
        Properties prop = new Properties();
        File file = new File("count.ini");
        if(!file.exists())
            file.createNewFile();
        FileInputStream fis = new FileInputStream(file);
        prop.load(fis);
        int count = 0;
        String value = prop.getProperty("time");    
        if(value != null){
            count = Integer.parseInt(value);
            if(count >= 5){
                System.out.println("您好,请交钱");
                return ;
            }
        }
        count++;
        prop.setProperty("time", count+"");
        FileOutputStream fos = new FileOutputStream(file);
        prop.store(fos, "");
        fos.close();
        fis.close();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值