黑马程序员java学习—File类,Properties类和递归思想

来源:互联网 发布:深圳云和数据是培训吗 编辑:程序博客网 时间:2024/06/05 07:32

一、File类:

专门用于描述系统中文件或者文件夹的对象。 

可以用于操作文件或者文件夹的属性信息。

1,获取文件信息。

获取名称,

获取路径。

获取大小。

获取时间。

...

2,判断。

是只读的不?

是隐藏的不?

3,文件的创建和删除以及该文件是否存在,文件对象自己最清楚。

具体创建,删除,是否存在等功能。

File中构造时,指定的路径可以是存在的,也可以是不存在的。 

//将c盘下的demo.txt封装成file对象。

File f1 = new File("c:\\demo.txt");

//将c盘下的abc文件夹封装成file对象。

File f2 = new File("c:\\abc");

File f5 = new File("c:\\abc\\ahha\\a.txt");//windows上使用。

File f6 = new File("c:"+ File.separator+"abc"+ File.separator+"ahha"+ File.separator+"a.txt");//可以在任何平台都可以使用。 File.separator是名称分隔符,在windows系统上是双反斜杠\\

 

二、file类方法

1、获取名称

File file = new File("abc");

String name = file.getName();//获取名称

String absPath = file.getAbsolutePath();//获取绝对路径。无论file中封 装的是什么,获取到的都是绝对的。全路径。 

String path = file.getPath();//获取路径。获取的是file中封装的内容。 

String dir = file.getParent();//获取父目录。

2、大小

long len = file.length();

long len2 = file.getTotalSpace();//获取文件所在盘符的空间大小

3、获取最后一次修改的时间

long time = file.lastModified();

//为了知道具体的时间,需要进行转换。

//将time毫秒值转成Date对象。

//对Date对象进行格式化。 

Date d = new Date(time);

DateFormat format = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);

String str_time = format.format(d);

System.out.println(str_time);

4、判断

isHidden()是不是隐藏的

isDirectory()是不是一个目录

5、创建和删除文件和文件夹

对于文件的创建和删除

//1.创建

File file = new File("c:\\2.txt");

boolean b = file.createNewFile();

如果文件不存在,就创建。如果文件存在,就不创建。输出流流会覆盖,如果不覆盖,需要在构造函数中加入true参数。续写。

//2.删除。

boolean  b = file.delete();

//3.判断是否存在。

boolean b = file.exists();

 

对于文件夹的创建和删除

//1.创建一级文件夹

File dir = new File("c:\\abc");

boolean b = dir.mkdir();

//2.创建多级文件夹

File dir = new File("c:\\abc\\a\\b\\c");

boolean b = dir.mkdirs();

//3.删除文件夹

boolean b = dir.delete();//从里往外删,删完内容才能删目录

if(file.exists() && file.isFile())// 要判断file中封装的是文件还是目录必须有前提,必须存在。用exists进行判断。 

 

6、虚拟机退出时再删除deleteOnExit()

File f1 = new File("c:\\haha.jpg");

file.deleteOnExit();//虚拟机退出时会自动删除f1文件,因为流对象正在操作这个文件。

file.delete();//此时就会发生了异常

7、对文件进行重命名

File f1 = new File("c:\\haha.jpg");

File f2 = new File("d:\\xixi.jpg");

f1.renameTo(f2);//将haha.jpg更名为xixi.jpg并从c盘移到d盘。 有一个剪切动作。

8、列出根目录 系统的盘符

File[] roots = File.listRoots();//列出系统根

for(File root : roots){

        System.out.println(root);

}//对盘符进行遍历

 

三、递归思想

递归就是函数自身调用自身(直接或者间接)

1,一定要定义条件。 否则就是StackOverflowError栈内存溢出

 2,一定要注意递归次数。不宜过多,否则也会栈内存溢出

 什么时候用递归呢?

当一个功能被复用,每次这个功能需要的参数都是根据上一次该功能的元素得出的。

练习:删除一个带内容的文件夹。

思路:

1,删除一个带内容的目录,必须按照window的规则,从里往外删。

2,要删除最里面,如果做到的呢?可以使用递归。

import java.io.*;class  RemoveDir{public static void main(String[] args) {File dir = new File("d:\\testdir");removeDir(dir);}public static void removeDir(File dir){File[] files = dir.listFiles();for(int x=0; x<files.length; x++){if(files[x].isDirectory())removeDir(files[x]);elseSystem.out.println(files[x].toString()+":-file-:"+files[x].delete());}System.out.println(dir+"::dir::"+dir.delete());}}

 

四、properties类(重要)
Properties:
1, Map接口中Hashtable的子类。
2, 该类上没有泛型定义,因为它的键值都是固定的字符串类型。
3, 因为存储都是字符串数据,通常都作为属性信息存在。
4, 该集合最大的特点就是可以和IO技术相结合。也就是,该集合中的数据可以来自于流。也可以将集合中的数据写入到流中。
对Properties集合最基本演示。
public static void methodDemo_1(){
      Properties prop = new Properties();//创建Properties集合对象。

     prop.setProperty("wangwu", "28");
     prop.setProperty("zhangsan", "20");
     prop.setProperty("lisi", "34");//存储元素。

    Set<String> nameSet = prop.stringPropertyNames();//取元素。所有。
    for(String name : nameSet){
    String value = prop.getProperty(name);
    System.out.println(name+":"+value);
  }
}

//使用list方法将集合中的数据指定目的地。如指定目的地是显示器System.out
prop.list(System.out);//一般用于调试。
 
下面的方法很重要 开发时常用到
public static void methodDemo_3() throws IOException {
    Properties prop = new Properties(); //集合
    FileInputStream fis = new FileInputStream("info.txt");//输入流
    prop.load(fis); //将流中的数据存储到集合中。 使用集合的load方法。
    prop.setProperty("wangcai", "37");//想要对数据做修改。,其实是对文件中的键值对进行覆盖。
    FileOutputStream fos = new FileOutputStream("info.txt");//新创该文件对其覆盖。
    prop.store(fos, "haha");//想要将修改的数据保存到文件中,使用store方法。haha部分是描述部分.
    fos.close();
    fis.close();
    prop.list(System.out);
}
 

 
 
 
五、对properties类的操作练习
练习:定义一个功能用于记录住软件运行的次数,如果运行次数大于5次。不要在运行
并给出提示:试用次数已到,请注册!给钱!
思路:
1,计数器。而且这个计数器必须软件运行结束后,持久化存储。
2,每次软件启动都要读取这个记录了计数器的数据的文件。并将计数器的值取出自增后,在重新存储。
3,数值需要名称标记,就有了键值对。这就是map集合,还要操作硬盘设备上的数据,就使用到了IO流。
 map和io结合的对象正好有Properties.
代码如下:

import java.io.*;import java.util.*;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);//将流中的数据加载到prop中。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();}}


 


 

 

 

原创粉丝点击