黑马程序员—File类

File类

用来将文件或文件夹封装成对象。

方便对文件或文件夹的属性信息进行操作。

File对象可以作为参数传递给流对象的构造方法。

了解File类中的常用方法。


File类中的常见方法:

1、创建

boolean createNewFile(); 在指定位置创建文件,如果该文件已经存在,则不创建,返回为false。

这点和输出流不一样,输出流对象一建立就创建文件,如果已经存在的话会覆盖源文件。

2、删除

boolean delete(); 删除失败则返回false

void deleteOnExit();退出的时候删除指定文件

3、判断

boolean canExcute();         是否可执行

boolean exists(); 判断文件是否存在

boolean mkdir(); 创建目录(创建文件夹),只能创建一层目录

boolean mkdirs(); 创建多级目录

boolean isFile(); 判断是否为文件

boolean isDiretory(); 判断是否为目录

//在判断文件对象是否为目录或文件时,必须先判断该文件对象封装的内容是否存在,用exists方法判断。

boolean isHiden(); 是否为隐藏文件

boolean isAbsolute(); 是否为绝对路径

4、获取信息

getName(); 获取封装对象的名称

getPath(); 当前路径

getAbsolutePath(); 获取绝对路径

getParent(); 返回的是绝对路径中文件的父目录

long lastModified(); 最后一次修改的时间

long length(); 返回此抽象路径名表示的文件的长度(文件大小)

String[] list();  返回指定路径下包含的文件和文件夹的名称,包含隐藏文件

//调用list()方法的file对象必须是封装了一个目录,并且该目录必须存在。

File[] listFiles();  返回目录下的文件与文件夹,返回的都是File对象,方便进行后续操作


一些简单方法的运用:

import java.io.*;

class FileDemo
{
	public static void main(String[] args)throws IOException
	{
		method_4();
	}
	
	public static void method_4()
	{
		File f = new File("123.txt");
		sop("path:"+f.getPath());
	  sop("AbsolutePath:"+f.getAbsolutePath());
	
	}
	
	//创建文件
	public static void method_1()throws IOException
	{
		File f = new File("file.txt");
//		sop("create:"+f.createNewFile());
		sop("delete:"+f.delete());
	}
	
	//判断文件
	public static void method_2()throws IOException
	{
		File f = new File("file.txt");
		sop("create:"+f.createNewFile());
		
		sop("execute:"+f.canExecute());
	}
	
	
	//创建File对象
	public static void consMethod()
	{
		//将a.txt封装成File对象,可以将已有的和未出现的文件或者文件夹封装成对象。
		
		File f1 = new File("F:\\abc\\a.txt");
		boolean bl=f1.mkdirs();
		//
		File f2 = new File("F:"+File.separator+"abc","b.txt");
		
		File d = new File("F:\\abc");
		File f3 = new File(d,"c.txt");
		
		sop(bl);
		sop("f1:"+f1);
		sop("f2:"+f2);
		sop("f3:"+f3);
	
	
	}
	
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
}

File.separator :与系统相关的默认名称分隔符,为了方便,它被表示成字符串(目录分隔符)


下面对File进行一些简单的练习,

需求:列出指定目录下的文件或者文件夹,包含子目录中的内容,也就是列出指定目录下的所有内容。

使用递归的方式完成。

注意事项:

1、限定条件。

2、要注意递归的次数,避免内存溢出。


/*
需求:
遍历一个目录下的文件和文件夹

因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可。
在列出过程中出现的还是目录的话,还可以再次调用本功能。
也就是函数自身调用自身,这种编程手法,称为递归
*/
import java.io.*;
class FileDemo3
{
	public static void main(String[] args) throws IOException
	{
		File dir = new File("F:\\java");
	 	showDir(dir,0);

	}
	
	public static String getLevel(int level)
	{
		/*
		用StringBuilder来装载获取到的目录,并进行分级
		*/
		StringBuilder sb = new StringBuilder();
		for(int i=0;i<level;i++)
		{
			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(int i=0;i<files.length;i++)
		{
			//如果这个文件时目录,则继续调用方法自身,再对这个目录文件进行遍历
			if(files[i].isDirectory())
				showDir(files[i],level);
			else
				System.out.println(getLevel(level)+files[i]);
		}
	}
	
	/**********************************************
	//递归演示
	**********************************************/
	//用递归求从1+.....+n的值
	public static int getNum(int n) //数值太大会导致内存溢出
	{
		if(n==1)
			return 1;
		return n+getNum(n-1);
	}
	
	//用递归求一个整数的二进制表现形式
	public static void toBin(int num)
	{
		if(num>0)
		{
			toBin(num/2);
			System.out.print(num%2);
		}
	}
}
		



下面介绍Properties类

Properties是hashtable的子类。

也就是说它具备了map集合的特点,而且它里面存储的键值对都是字符串。

是集合中和IO技术相结合的集合容器。该对象的特点:可以用于键值对形式的配置文件。

Properties prop = new Properties();

prop.setProperty("zhangsan",30); //设置属性的键和值

prop.getProperty("zhangsan");  //获取zhangsan所对应的值,相当于"键—值"的形式。

prop.StringPropertyNames(); //返回一个Set集合,包含prop中所有的键值。


用Properties演示软件使用次数计数:

import java.io.*;
import java.util.*;
class RunNumberDemo 
{
	public static void main(String[] args) throws IOException
	{
		File file = new File("number.ini");
		if(!file.exists())
			file.createNewFile();
		FileInputStream fis = new FileInputStream(file);
		FileOutputStream fos = new FileOutputStream(file);
		Properties prop = new Properties();


		prop.load(fis);
		int number = 0;
		String value = prop.getProperty("time");
		if(value!=null)
		{
			number = Integer.parseInt(value);
			if(number>=5)
			{
				System.out.println("试用次数已经到了,麻烦续费!");
				return;
			}
		}
		number++;
		prop.setProperty("time",number+"");
		
		prop.store(fos,"");//改完数据之后,必须store进存储的文件中
		
		fis.close();
		fos.close();
	}
}

在看毕老师的代码之前,自己学习了Properties的方法之后,自己试着写了一个,也可以实现,

但相比毕老师的代码,感觉还需要更加努力才可以将代码更加精炼以及提高效率


package com.east.day18;
import java.io.*;
import java.util.*;
/*
模拟软件使用次数提示,超过次数提示试用期满,需注册

*/
class PropertyDemo2
{
	public static void main(String[] args)throws IOException
	{
		int count = 1;
		File file = new File("D:\\javademo\\count.txt");
		if(!file.exists()){
			file.createNewFile();
			count = 0;
		}
		Properties prop = new Properties();
		
		if(count == 0){
			PrintWriter pw = new PrintWriter(new FileWriter(file));
			prop.setProperty("count", "1");
			prop.list(pw);
			prop.clear();
			pw.close();
		}
		
		else{
			prop.load(new FileReader(file));
			String s = prop.getProperty("count");
			count = Integer.parseInt(s);
			
			if(count < 5){
				count++;
				prop.setProperty("count", String.valueOf(count));
				prop.store(new FileWriter("D:\\javademo\\count.txt"),"");
				
			}
			else {
				System.out.println("免费试用时间已到,请续费以继续使用哦!");
			}
		}
	
	}
	
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值