------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
File概述
一、File概述
用来将文件或者文件夹封装成对象,方便对文件与文件夹的属性信息进行操作。File对象可以作为参数传递给流的构造函数。
创建方法:
1、将已有的和未出现的文件或文件夹封装成对象
File f 1= newFile(“c:\\a\\a.java”);
File f2 = newFile(“c:\\a”);
File f = newFile( “a.java”);
2、也可以目录和文件分开来传入
File f 3= newFile(“c:\\a” , “a.java”);
3、也可以将文件夹分装为File对象传入
File f4 = newFile( f2, “a.java”);
以上对象创建的时候,要注意的是,如果传入文件,只有文件名,那么这个目录就是相对目录,如f。如果有盘符和具体文件夹,那么就是绝对路径,如f1。
File中有一个字段,是separator,表示目录分割符,跨平台通用。静态的。
二、File中的常见方法
1、 创建
booleancreatNewFile():创建新文件,会有异常。在指定位置创建文件,创建成功则返回true,如果该文件已经存在,则不创建,返回false。
boolean mkdir():创建文件夹,只限一级目录。
boolean mkdirs():创建多级文件夹。
2、 删除
boolean delete();删除文件或文件夹,删除失败时返回false
void deleteOnExit();在程序退出时删除文件或文件夹
3、 判断
boolean exists():判断文件和目录文件是否存在,这个很总要,很常用。
isDirectory():判断对象是否是目录。
isFile():判断对象是否文件。
使用上述两方法时要注意,在判断对象是否是文件或者目的时,必须要先判断该文件对象封装的内容是否存在,即先判断exists。
isAbsolutePath():判断是否是绝对路径
4、 获取信息
String getName():获取文件或目录名称
String getPath():获取路径
String getParent():该方法返回的是绝对路径中的父目录,如果此路径名没有指定父目录,则返回null
。如果是相对路径就是null。如果相对路径中有上一层目录,就返回上层目录。
String getAbsolutePath():获取绝对路径
lastModified():获取最后修改时间
length():获取文件大小
5、 特殊方法boolean renameTo(File dest)
举例说明:File f1 = new File(“c:\\d.java”);
File f2 = new File(“c:\\ss.java”);
f2.renameTo(f2);
这里对应的c盘目录中,d.java就变成了ss.java。如果重命名的地址是e盘的话,原来c盘的d.java就不见了,在e盘会出现一个ss.java文件,相当于剪切。
三、File重要方法
File[] listRoots():会返回根目录
String[] list():会返回指定文件路径下的文件名和文件夹名,包括隐藏的名字的字符串数组。调用list方法的file对象必须封装了一个目录,该目录还必须存在。
String[] list(FilenameFilter filter):这是是传了一个过滤器,可以过滤文件名。而FilenameFilter是一个接口,其中有一个方法accept(
File dir,
String name)
,
这里就会接收一个文件名,和字符串,返回值类型为boolean。当我们使用这个方法时,list会自动调用这个接口中的accept方法,当返回为true时,就会通过把文件或文件夹名称输入到String数组中,返回为false时就不会。所以我们继承这个几口,复写你方法即可。具体程序为:
String[] arr = dir.list(new FilenameFilter(){
//复写accept方法,注意匿名内部类的运用
publicboolean accept(File dir, String name) {
//进行我们需要的判断,过滤文件名
return name.endsWith(".jpg");
}
});
上面这两个方法,返回的仅仅是文件和文件名的字符串
File[ ] listFiles():同上面的方法一致,但是返回的是File实例,可操作的。
File[ ] listFiles(FIlenameFilter filter):加了过滤器的
运用上面的方法列出指定目录下问价或者文件夹,包含子目录中的内容,也就是列出指定目录下所有内容。先看程序;
publicclass FileListDemo {
publicstaticvoid main(String[] args) {
// TODO自动生成的方法存根
File f = new File("E:\\Java\\javaTest");
listDemo(f);
}
publicstaticvoid listDemo(File f){
//用list方法列出指定目录下的文件和文件夹
File[] str =f.listFiles();
for (File file : str) {
//遍历数组进行判断是否为目录
if(file.isDirectory()){
//是目录则打印一下这个目录,然后继续调用listDmeo方法
System.out.println(file.getName().toUpperCase());
listDemo(file);
}
else
//不是目录则打印到控制台
System.out.println(file.getPath()+"..."+file.getName());
}
}
}
从上面程序可看出,我们在方法中有调用了本方法,简单来说就是自己调用自己:看一个简单的程序:
void method(){
method();
}
这就是自己调用了自己,这就叫递归。当然上面这个是死循环。
因为在需求中,目录中还有目录,只要使用同一个列出目录功能的函数完成即可。在列出过程中出现的还是目录的话,还可以再次调用本功能。也就是函数自身调用自身,这中编程方式称为递归。
在使用递归的时候要注意:1、规定限定条件,避免死循环。
2、注意递归次数,尽量避免内存溢出。
因为递归是函数不断调用函数自身,所以在栈内存中会不断建立函数,而之前的函数由于后面调用的函数仍在执行,不能释放,所以一旦调用自身次数过大,就会在栈内存中建立非常多的函数,导致内存溢出。
总结:
1、File对象是操作文件和文件夹的,可以创建文件和文件夹。
2、在之后我们使用文件的时候,一般都要建立成对象,流的构造函数可以接受File对象
3、注意相关的常用方法都是和文件与文件夹有关的。
4、遍历目录的两个方法,一个是list,返回的是文件名组成的String类型的数组。一个是listFiles,返回的是目录下的文件所组成的File类型的数组。
5、list和listFiles方法都可以接受一个过滤器FilenameFilter,这是一个接口,其返回的是boolean,当返回为true时,就会载入,否则就会剔除,我们需要复写其中的accept(File dir,String name)。
6、递归方法,就是函数自身调用自身。需要注意:一定要限定条件,避免死循环;递归次数不宜过多,避免内存溢出。
Properties
一、Porperites概述
Properties是hashtable的子类,也就是说,它具备map集合的特点,而且它里面的键值对都是字符串。Properties是集合中和IO技术相结合的集合容器。该对象的特点:可以用于键值对形式的配置文件。
一般软件都会配置信息,而配置信息就在ini文件里,一般只要我们启动软件,相关的配置信息就会加载进来。Properties的特点就在于此,可以操作内存中的键值对,也可以操作硬盘上的键值对即配置信息。
二、常用方法
建立对象 Properties p = new Properties();
1、void load(InputStream in ):从输入流中读取属性列表加载进集合。
FileInputStream fis = new FileInputStream(“info.txt);
p.load(fis);:这步就把info.txt中的属性列表,即键值对,加载进集合中了。
void load(Reader r ):从字符流中数据加载进集合
2、String getProperty(String ,key):获取指定键对应的值
String value =p.getProperty(“haihei”);
3、Object setProperty(Sting key, String value):设置键值对,相当于map集合中的put。
p.setProperty(“key”, “value”);
4、Set<String> stringPropertyNames():返回属性列表的键的set集合。
Set<String>names = p.stringPropertyNames();之后在遍历即可。
5、list(PrintStream out):将属性列表输出到指定的输出流
p.list(System.out);
6、重要一点,Porperties可以操作硬盘数据,这里就用到store方法,把内存中我们操作的properties的数据存入到目标文件中。
void store(OutputStream out , String comments)
//改变键值对
p.setProperty(“key111” , “value222”);
//建立存储目标
FileOutpurStream fos = newFileOutputStream(“info.txt”);
//存入目标文件中(就是操作硬盘的数据)
p.store(fos,”information”);
三、注意点
1、Properties中都是String类型的
2、加载数据时,需要有固定格式:键=值
3、配置文件中,在#后面的为注释信息,Properties不会加载
总结来说:
1、Properties是Map类集合。Properties是集合中和IO技术相结合的集合容器。该对象的特点:可以用于键值对形式的配置文件。
2、,它里面的键值对都是字符串。
3、Porperties可以直接从流中加载配置文件信息,方法为load,接受一个流对象。加载数据是要有固定格式。
4、Porperties可以用store方法把程序中配置好的键值信息传入一个文件汇总,这个方法接收一个输出流。
5、它有自己的设置方法,setProperty(key ,value)和getProperty(key)。而map集合中的是put。
6、注意方法stringPropertyNames,它会将propertie中键信息存储到Set集合中,并将这个集合返回。
7、配置文件中#之后的部分,在Propertie加载时,不会将这部分加载,这部
分是注释信息。