黑马程序员—File类

来源:互联网 发布:ps4全境封锁网络 编辑:程序博客网 时间:2024/04/28 10:59

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);elseSystem.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
原创粉丝点击