欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaSE小笔记--25(IO流初识5配置文件和File递归练习)

程序员文章站 2022-07-10 12:16:04
...

1.Properties

Properties不是一个流,而是作为Map双列集合使用。由于以后用它固定的作用:作为作配置文件,会和流有关联,所以这里说一下。值得注意的是:虽然是个双列集合,但是没有泛型,属性列表中的每一个键和其对应值都是一个字符串。

Properties是Hashtable的子类。Properties类表示了一个持久的属性集;可保存在流中或从流中加载。

Properties的特殊功能:

public Object setProperty(String key,String value)---设置键和值

public String getProperty(String key)---根据键获取值

public Enumeration<String> stringPropertyNames()---拿到所有键存到枚举中,用于遍历

public static void main(String[] args) {
	Properties prop = new Properties();
	prop.setProperty("name", "小明");
	prop.setProperty("tel", "13312341234");
	
	Enumeration<String> en = (Enumeration<String>) prop.propertyNames();
	
	while(en.hasMoreElements()) {
		String key = en.nextElement();	//获取Properties中的每一个键
		String value = prop.getProperty(key);	//根据键获取值
		System.out.println(key+"="+value);
	}
}

        上面的操作都是在内存中进行的,而Properties是配合着配置文件使用的。但是实际上配置文件都是在硬盘中,所以两者的交互就和IO流有了关联,用到了Properties的load()和store()方法

常用的重载load()方法有:load(InputStream inStream)        load(Reader reader)

常用的store()方法:store(OutputStream out,String comments)        store(Writer writer,String comments)


public static void main(String[] args) throws FileNotFoundException, IOException {
	
	Properties prop = new Properties();
	System.out.println("读取前"+prop);
	
	prop.load(new FileInputStream("config.properties"));//加载配置文件
	
	prop.setProperty("tel", "18888888888");//修改配置文件中的tel键的键值对,现在只是在内存中修改
	
	prop.store(new FileOutputStream("config.properties"), null);//把硬盘中的配置文件也修改,相当于更新同步一下啊
								   //第二个参数是用来描述文件列表的,如果不描述可以传null
		
		
}	

2.File递归练习

(1)统计文件夹的大小

public static long getFileLength(File dir) {
	//1.定义一个求和变量
	long len  = 0 ;
	//2.获取文件夹下所有文件和文件夹
	File [] subFiles = dir.listFiles();
	//3.遍历数组
	for (File file : subFiles) {
		//4.判断是文件,就累加
		if(file.isFile()) {
			len = len + file.length();
		}else {
			//5.判断是文件夹,就递归调用
			len  = len + getFileLength(file);
		}
	}	
	return len;
}	
	

文件夹路径调用length()方法会返回0,所以不能直接用文件夹路径调用该方法统计大小

(2)删除文件夹

public static void deleteFile(File dir) {
	//获取文件夹下所有文件和文件夹
	File [] subFiles = dir.listFiles();
	//遍历数组
	for (File file : subFiles) {
		//判断是文件,就删除
		if(file.isFile()) {
			file.delete();
		}else {
			//判断是文件夹,就递归调用
			deleteFile(file);
		}
	}
	//循环结束后,删除空的文件加
	dir.delete();	
}

 (3)把路径下的所有文件和文件夹按层级打印

public static void printFile(File dir,int lev) {
	//获取文件夹下所有文件和文件夹
	File [] subFiles = dir.listFiles();
	//遍历数组
	for (File file : subFiles) {
		for(int i = 0;i<=lev;i++) {
			System.out.print("\t");
		}
		//首先都要打印当前路径
		System.out.println(file);
		//如果是文件加就递归调用
		if(file.isDirectory()) {
			printFile(file,lev+1);
		}
	}