【学习日记】javaIO流的知识点总结(2)

File类

常见方法:

1,创建
boolean createNewFile(); 在指定位置创建文件,如果该文件已经存在,则不创建,返回false。和输出流不一样,输出流对象一建立创建文件。而且文件已经存在,会覆盖。
boolean mkdir()   创建一级文件夹。
boolean mkdirs();  创建多级文件夹。
2,删除
boolean delete();   删除失败返回false。如果文件正在被使用,则删除不了返回falsel。
void deleteOnExit();  在程序退出时删除指定文件。
3,判断
boolean exists(); 文件是否存在.若不存在,则以下判断都是flase,所以对文件的性质判断前,必须判断其是否存在。
isFile();      判断FIle对象是否是文件
isDirectory();    判断FIle对象是否是目录
isHidden();     判断file对象是否隐藏
isAbsolute();   判断指定的虚拟路径是否为绝对路径
4,获取信息。
getName();     获取名字
getPath();      获取路径
getParent():     该方法返回的是绝对路径中的父目录。如果获取的是相对路径,返回null。如果相对路径中有上一层目录那么该目录就是返回结果。
getAbsolutePath()  获取绝对路径
long lastModified()  返回此抽象路径名表示的文件最后一次被修改的时间。
long length()     返回由此抽象路径名表示的文件长度
5、其他方法
File.list();    将目录下的文件列表返回(String)。
File.listFile();  返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
注意:一般优先使用listFile,因为其返回的是文件类型的对象,有很多文件有关的方法可以使用。
这两个方法根据其构造函数里FileFilter里的accept方法判断返回哪些文件。Ruturn true;全返回。Return flase;全不返回。

展开目录(递归)

  列出指定目录下文件或者文件夹,包含子目录中的内容。也就是列出指定目录下所有内容。
  因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可。在列出过程中出现的还是目录的话,还可以再次调用本功能。也就是函数自身调用自身。这种表现形式,或者编程手法,称为递归。

递归要注意:
1,限定条件。
2,要注意递归的次数。尽量避免内存溢出。

代码如下:

package test; 
import java.io.*;
import java.util.*;
public class test3 {
    public static void main(String[] args ) throws IOException{
        //listDemo("testdir");
        //建立一个File对象,装有一个地址
        File a =new File("d:\\testdir");
        //将File对象和目录级数传入到该函数
        listFilesDemo(0, a);
        }
public static void listFilesDemo( int level,File a){
        //File f = new File("d:"+File.separator+a);
        //先打印总目录
        sop(getLevel(level)+a.getName());
        level++;
        //获取该目录下的文件名
        File[] names = a.listFiles();
        for (int i = 0; i < names.length; i++) {
        //判断是否是目录
            if (names[i].isDirectory()) {
            //是目录的话,则传到该该方法,继续迭代
                listFilesDemo(level,names[i]);
                //当迭代完成后,从里到外打印文件
                sop(getLevel(level)+names[i]);
            }
            else{
            //不是目录,则打印
                sop(getLevel(level)+names[i]);
            }
        }
    }
    public static String  getLevel(int level){
        //建立一个字符串缓存区
        StringBuilder sb = new StringBuilder();
        sb.append("|---");
        for (int i = 0; i < level; i++) {
            //sb.append("|---");
            //每进入一级目录,则多加一个“ ”
            sb.insert(0, " ");
        }
        //将其按字符串形式返回
        return sb.toString();
    }
    public static void sop(Object obj){
        System.out.println(obj);
    }
}

Properties

hashtable的子类。
具备map集合的特点。而且它里面存储的键值对都是字符串。
是集合中和IO技术相结合的集合容器。

该对象的特点:可以用于键值对形式的配置文件。
那么在加载数据时,需要数据有固定格式:键=值

常用方法:

1、设置
setProperty(key,value)设置键和值
getProperty(key)返回该键的值
getProperty(key,defaultValue)用指定的键在属性列表中搜索属性
stringPropertyNames()返回键的集合,string类型的(set类型的集合)
2、输入输出
list()将属性列表输出到指定的打印流
load()从输入流中读取属性列表
store()将属性列表写入输出流,并可以添加注释

想要将info.txt中键值数据存到集合中进行操作。

思路
1,用一个流和info.txt文件关联。
2,读取一行数据,将该行数据用”=”进行切割。
3,等号左边作为键,右边作为值。存入到Properties集合中即可。
代码如下:
package test; 
import java.io.*;
import java.util.*;
 /** *@author wangkun */

public class test3 {
    public static void main(String[] args ) throws IOException{
    info();
    }
    public static void info() throws IOException{
    //建立一个test文件的输入缓存流bf
        BufferedReader bf =new BufferedReader(new FileReader("d:\\test.txt"));

        Properties p =new Properties();
        //将缓存流载入到p中
        String line = null;
            while((line = bf.readLine())!=null){
            //将数据以"="分割
                String[] args = line.split("=");
                //sop(args[0]);
                //sop(args[1]);
                //输入到p中
                p.setProperty(arr[0],arr[1]);
        }
        bf.close();
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

你可能感兴趣的:(java,File)