您的位置:首页 > 编程语言 > Java开发

java笔记25 File类、递归、Properties

2015-06-20 23:56 686 查看
1.       File类

File类用来将文件或者文件夹封装成对象,方便对文件与文件夹的属性信息进行操作。File对象可以作为参数传递给流的构造函数。

常用方法

1、创建

         boolean  createNewFile()

         如果没有文件,创建成功返回true

         再次创建返回false,即没有覆盖。

         创建文件夹

         f.mkdir();//只能创建一级目录,会创建一个名为file.txt的文件夹

           f.mkdirs();//可以创建多级目录

2、删除

         boolean  delete();

         void deleteOnExit();在程序退出时删除

3、判断

         boolean exists()

                            isFile()

                            isDirectory()

                            isHidden() :是否隐藏,通常不要读取系统隐藏文件

                            isAbsoulute():是否是绝对路径

4、获取

                   getName();返回此抽象路径名表示的文件或目录的名称

                   getPath();将此抽象路径名转换成一个路径名字符串

                   getParent(); 获取父目录路径

                   //该方法返回的是绝对路径中的父目录,因为定义时使用的是file.txt,所以父目录是null

                    //如果相对路径中有上一级目录,则返回该上一级目录

                  getAbsouluteFile()

                   getAbsoulutePath()

                   lastModified():最后一次被修改的时间

                   length(); 文件大小  返回类型是long

                 f.renameTo(f1);//将f的文件名重命名为f1的文件名

   public static void method_5() throws IOException    {        File f=new File("file.txt");        File f1=new File("file2.txt");        f.renameTo(f1);//将f的文件名重命名为f1的文件名    }    public static void method_4() throws IOException    {        File f=new File("file.txt");        f.createNewFile();       sop("abspath"+f.getAbsolutePath());//D:\shakespace\workspace\Heima\file.txt        sop("path"+f.getPath());//和new File一样  file.txt        sop("parent"+f.getParent());//null        //该方法返回的是绝对路径中的父目录,因为定义时使用的是file.txt,所以父目录是null        //如果相对路径中有上一级目录,则返回该上一级目录           }    public static void method_3() throws IOException    {        File f=new File("file.txt");        sop(f.exists());//测试是否存在        f.mkdir();//只能创建一级目录,会创建一个名为file.txt的文件夹        //f.mkdirs();//可以创建多级目录        sop(f.isDirectory());//结果为true        sop(f.isFile());//结果为false              }    public static void method_2() throws IOException    {        File f=new File("H05_10ThisDemo.java");        sop(f.canExecute());//测试是否可执行  true              }    public static void method_1() throws IOException    {        File f=new File("file.txt");        sop(f.createNewFile());//true        sop(f.delete());//true        f.deleteOnExit();//运行结束时删除    }
public static void consMethod()
{
           //将a.txt封装成file对象,可以将已有和未出现的文件或者文件夹封装成对象
           File f1=new File("D:\\workspace\\a.txt");
           File f2=new File("D:\\workspace\\Heima","b.txt");
           File f3=new File("D:"+File.separator+"workspace"+File.separator+"Heima","b.txt");
           //+File.separator+  具有跨平台性                
         }

 

5、 list():返回目录下的文件和文件夹,包含隐藏文件

import java.io.*;public class H_05FileDemo2 {    public static void main(String[] args) {        listDemo();//获取文件,包含隐藏文件        listRootsDemo();//得到根目录(CDEF…)    }    public static void listDemo()    {        File f=new File("d:\\");//如果是文件,内部没有内容,会报错。        String [] names=f.list();              for(String name: names)        {            sop(name);        }    }    public static void listRootsDemo()    {        File[] files=File.listRoots();        for(File f:files)        {            sop(f);//不能直接获得盘符的大小        }    }    public static void sop(Object obj)    {        System.out.println(obj);    }}

 

2.       递归

需求

列出指定目录下的文件或者文件夹,包含子目录中的内容

也就是列出指定目录下的所有内容

遍历→遇到文件夹→继续遍历

1、因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可

           在列出过程中出现的还是目录的话,还可以再次调用本功能

           也就是函数自身调用自身

           这种表现形式或者变成手法,成为递归

                    关键:函数中调用函数自身。

2、递归的注意点

           2.1 限制循环条件

           2.2 注意递归的次数,防止内存溢出

示例

public static void toBin(int num)
         {
                   if(num>0)
                   {
                            toBin(num/2);
                            sop(num%2);
                   }
         }
         传入6,输出结果是110
         不是011
         因为递归的时候不断在栈内存开辟空间,从最后满足条件的地方开始
         //sum(50000)发生Exception in thread "main" java.lang.StackOverflowError

示例2 显示文件夹中的所有文件      

  public static void showDir(File dir)    {        System.out.println(dir);        File[] files=dir.listFiles();        for(File s:files)        {            if(s.isDirectory())                showDir(s);            else                sop(s);        }    }

3.       创建java文件列表文件

/*
    建立一个java文件列表文件
    思路
    1、对指定的目录进行递归
    2、获取递归过程所有的java文件的路径
                public static void fileToList(File dir,List<File> list)
    {
        File[] files=dir.listFiles();
        for(File file:files)//循环file数组
        {
            if(file.isDirectory())//是目录 递归判断
                fileToList(file,list);
            else
            {
                if(file.getName().endsWith("java"))//是文件 判断扩展名
                    list.add(file);//符合添加到list集合中
               
            }
        }
    }
    3、将这些路径存储到集合中
    4、将集合中的数据写入到一个文件中
        存入到硬盘中
    文件来源:内存
    写入目的:硬盘
        写入流:   
 */
package day20;
import java.io.*;
import java.util.*;
public class H_10JavaFileList {
    public static void main(String[] args)
    {
        File dir=new File("D:\\shakespace\\workspace");
        List<File> list=new ArrayList<File>();
        fileToList(dir,list);
        System.out.println(list.size());//获得文件数量     
        writeToFile(list);
    }
    public static void fileToList(File dir,List<File> list)
    {
        File[] files=dir.listFiles();
        for(File file:files)//循环file数组
        {
            if(file.isDirectory())//是目录 递归判断
                fileToList(file,list);
            else
            {
                if(file.getName().endsWith("java"))//是文件 判断扩展名
                    list.add(file);//符合添加到list集合中             
            }
        }
    }
    public static void writeToFile(List<File> list)
    {
        BufferedWriter bufw=null;
       
        try
        {
            bufw=new BufferedWriter(new FileWriter("D:\\shakespace\\workspace\\Heima\\java.txt"));
            for(File f:list)
            {
                String path=f.getAbsolutePath();
                bufw.write(path);
                bufw.newLine();
                bufw.flush();
            }          
        } catch (IOException e) {
        e.printStackTrace();
        }
        finally
        {
            if(bufw!=null)
                try {
                    bufw.close();
                } catch (IOException e) {
                            e.printStackTrace();
                }              
        }
    }
}

 

4.       Properties集合

Properties是hashtable的子类

也就是说它具备map集合的特点,而且它里面存储的都是字符串,不需要加泛型

是集合中和IO技术相结合的集合容器

该对象的特点:可以用于键值对形式的配置文件。

/*
         演示 如何将流中的数据存储到集合中
        将info.txt中键值存到集合中进行操作
        1、用一个流和info.txt文件关联
        2、读取一行数据,将该行数据用“=”切割
        3、等号左边作为键,右边作为值,存入到Properties集合中即可
 */
package day20;
import java.io.*;
import java.util.*;
public class H_11Properties {
         public static void main(String[] args) throws IOException {
                   //setAndGet();
                   method_1();
                   loadDemo();             
         }
         public static void loadDemo() throws IOException
         {
                   Properties prop=new Properties();
                   FileInputStream fis=new FileInputStream("info.txt");
                   //将流中的数据加载进集合
                   prop.load(fis);
                   prop.setProperty("zhangsan", "23");
                   //prop.store(new FileOutputStream("info.txt"), "haha");
                   sop(prop);
                   prop.list(System.out);
                   fis.close();
         }
         public static void method_1() throws IOException
         {
                   BufferedReader bufr=new BufferedReader(new FileReader("info.txt"));
                   String line=null;
                   Properties prop=new Properties();
                   while((line=bufr.readLine())!=null)
                   {
                            //sop(line);
                            String[] arr=line.split("=");
                            //sop(arr[0]+"  "+arr[1]);
                            prop.setProperty(arr[0], arr[1]);
                            //顺序按照哈希表
                   }
                   bufr.close();
                   sop(prop);                          
         }
         //设置和获取对象
         public static void setAndGet()
         {
                   Properties prop=new Properties();
                   prop.setProperty("zhangsan", "30");
                   prop.setProperty("lisi", "39");
                   //System.out.println(prop);
                   String value=prop.getProperty("zhangsan");
                   sop(value);
                   Set<String> names=prop.stringPropertyNames();
                   for(String s:names)
                   {
                            sop(s);
                   }                
         }
         public static void sop(Object obj)
         {
                   System.out.println(obj);
         }
}

需求:获取一个应用程序运行的次数,如果超过5次,给出使用次数已到请注册的提示,并不要再运行程序。

思路:

    1、应该有计数器

    每次程序启动都需要计数一次,并且是在原有的次数上进行计数。

    2、计数器就是一个变量。程序启动时进行计数,计数器必须存在于内存并进行运算。

    可是程序一结束,计数器消失了。那么再次启动该程序,计数器又重新被初始化了。

    而我们需要多次启动同一个应用程序,使用的是同一个计数器。

    这就需要计数器的生命周期边长,从内存存储到硬盘文件中。

    3、如何使用这个计数器呢?

    首先,程序启动时,应该先读取这个用于记录计数器信息的配置文件。

    获取上一次计数器次数。并进行使用次数的判断。

    其次,对该次数进行自增,并自增后的次数重新存储到配置文件中。

    4、文件中的信息该如何进行存储并体现。

    直接存储次数值可以,但是不明确该数据的含义。所以起名字就变得很重要。

    这就有了名字和值的对应,所以可以使用键值对。

    可是映射关系map集合搞定,又需要读取硬盘上的数据,所以map+io=properties。

        

import java.io.*;import java.util.*;public class H_14Properties {    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);//从fis中读取键值对        int count=0;        String value=prop.getProperty("time");//或者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();    }}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java笔记