File类

流只能操作具体的数据,但是对文件的大小、创建时间等信息却无法操作。这就有必须使用File类。

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

名称分隔符也可以使用File.separator,如上例 "c:"+File.separator+"a.txt"

1.常见的File类的获取信息方法

public static void getDemo()
{
     File file=new File("a.txt");
     String name=file.getName();
     String absPath=file.getAbsolutePath();
     String path=file.getPath();
     long len=file.lenght();
     long time=file.lastModified();
Date date=new Date(time);
DateFormat dateFormat=DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.Long);
string str_time=dateFormat.format(date);

string parentDir=file.getParent();//如是相对路径,则当前目录的父目录是null
//以下输出,略 …… }

2.创建与删除

        File file=new File("a.txt");

        boolean b=file.createNewFile();

       和输出流不一样的是,如果文件不存在,则创建,如果文件存在,则不创建。

       file.delete();

      注意:file.deleteOnExit()是在退出时删除。

File类还可操作文件夹。

File dir=new File("abc");

boolean b=dir.mkdir();

当文件或目录不存时,isFile()和isDirectory()均为false,所以最好先判断是否存在。

3.重命名(有剪切功能,可改变目录)

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

File f2=new File("c:\\b.txt");

boolean b=f1.renameTo(f2);

4. 获取系统根目录

File [] files=File.listRoots();

for(File file:files)

{

   System.out.println(file); //输出c:\  d:\   e:\等

}

5.获取空间容量

File file=new File("d:\\");

System.out.println(file.getFreeSpace());  //未用空间容量

System.out.println(file.getTotalSpace());  //总容量

System.out.println(file.getUsableSpace()); //已用空间容量

6.获取文件和目录列表

public static void  listDemo_1()
{
    File file =new File("c:\\"); //如果是文件或此目录不存在,则会有异常,所以最好加判断
    String[] names=file.list();
    for(String name:names)
    { 
         System.out.println(name);
    }
}

public static void  listDemo_2()
{
    File file =new File("c:\\"); //如果是文件或此目录不存在,则会有异常,所以最好加判断
    //list()方法可以带过滤器,过滤器的接口为FilenameFilter,它就一个方法accept() ,只要返回真,就取出
    String [] names=dir.list(new FilterByJava());
    for(String name:names)
    { 
         System.out.println(name);
    }
}


/*
   新建一个接口,做个过滤器
*/
public class FilterByJava implements FilenameFilter
{
     @Override
      public boolean accept(File dir,String name)
      {
          return name.endsWith(".java"); //取出所有扩展名为.java的文件名
      }
}

如果想过滤所有隐藏文件,那么不能用list()方法,因为这个方法只能获取和过滤文件和目录的名称,不能过滤文件的属性。

只能使用listFiles()方法。它也可以使用过滤器,参考上例。

删除非空目录

public static void removeDir(File dir)
{
        File [] files=dir.listFiles()
        for(File file:files)
        {
              if (file.isDirectory())
              {
                   removeDir(file);
              }
              else
              {
                   file.delete();   
              }
        }
        dir.delete();
}

下面看看Map-->Hashtable-->Properties

Properties集合特点:

1. 该集合中的键和值都是字符串类型

2. 集合中的数据可保存到流中或从流中获取

Properties集合用于操作以键值对形式存在的配置文件。

存:setProperties(String key,String value)

取:getProperties(String key)

实例:Properties集合的存和取

public static void propertiesDemo()
{
       //创建一个Properties集合
       Properties prop=new Properties();
      //存储元素
       prop.setProperty("张三",30);
       prop.setProPerty("李四",46);
       //修改
       prop.setProperty("张三",34);
      //取出
       Set<String> names=prop.stringPropertyNames();
       for(String name:names)
       {
            String value=prop.getProperty(name);
             System.out.println(name+":"+value);
       }
}

list(PrintStream p) 一般用于调试Properties集合

注意:PrintStream流是标准输出流,和System.out一样

如p.list(System.out);

 如果想把Properties集合存放到文件中,可用store(OutputStream out,String comments)方法

public static void storeProperties()
{
      Properties prop=new Properties();
      prop.setProperty("zhangsan","30");  //Properties流中操作中方为ISO编码,会出现乱码
      prop.setProperty("lisi","45");
      FileOutputStream fos=new FileOutputStream("info.txt");
      //将集合数据存储到文件中,使用store方法
      prop.store(fos,"name+age");
      fos.close();
}

读集合文件

Properties prop=new Properties();
//集合中的数据来自于一个文件,必须要保证该文件中的数据是键值对
//需要使用到读取流
FileInputStream fis=new FileInputStream("info.txt");
//使用load方法
prop.load(fis);
System.out.println(prop.list());

//修改集合文件

public static void modify()
{
     //读取文件
     File file=new File("info.txt");
     if (!file.exists())
     {
          file.createNewFile();
     }
     FileReader fr=new FileReader("info.txt");
     //创建集合
     Properties prop=new Properties();
     //读文件
      prop.load(fr);
     prop.setProperty("wangwu","16");
     //写文件
     FileWriter fw=new FileWriter(file);
     prop.store(fw,"");
     fw.close();
     fr.close();
}

键值对在修改时需要覆盖全文件,不易修改,可以使用XML文件

 

posted @ 2017-10-16 17:11  jsddj  阅读(414)  评论(0编辑  收藏  举报