------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一.File类
java.io.File类用来描述文件和文件夹,可以用来操作文件、文件夹及它们的相关属性,可以作为参数传给流的构造函数;
常用常量File.separator是跨平台的目录分割符。常用的初始化方法:
<span style="font-size:14px;">File f1 = new File("a.txt");//用文件名初始化
File f2 = new File("D:"+File.separator+"java", "a.txt");//用路径加文件名初始化
File f3 = new File(new File("D:"+File.separator+"java"), "a.txt");//同f2</span>
File的基本操作
(1)创建
createNewFile()在指定位置创建文件,存在则不创建,创建以后返回true,否则返回falsemkdir()/mkdirs() 创建文件夹,后者可以根据路径创建多级目,创建以后返回true,否则返回false
(2)删除
delete() 删除成功返回true,否则返回falsedeleteOnExit()虚拟机停止的时候删除。可以在File刚初始化的时候执行。
(3)判断
canExecute()是否能执行exists()判断文件或者目录是否存在
isDirectory()判断是否是目录
isFile() 判断是否是文件
isAbsolute() 判断路径是否绝对路径
注意:判断File是目录还是文件的时候一般先判断exists()否则都会返回false
(4)获取信息
File 有很多get开头方法,都是用来获取File的信息的。getName()获取文件或者目录名
getParent() 返回父目录的路径名
getPath() 获取路径名字符串
getAbsolutePath() 获取绝对路径名
lastModified() 获取最后修改时间
length() 获取文件大小
注意:getPath() 和 getAbsolutePath() 区别的是在初始化File的时候,如果使用相对路径初始化,getPath()返回的是相对路径,但是getAbsolutePath()返回绝对路径。
getParent()File 初始化的时候要指定文件的上级目录才会返回,否则返回null,例如C:\\abc\\a.txt,或者abc\\a.txt。
(5)获取文件列表
1)列出C盘下所有文件
示例代码:<span style="font-size:14px;"> /**
*
* 功能描述:列出C盘下所有文件
* @param args
*/
public static void main(String[] args) {
File f = new File("c:\\");
String[] names = f.list();
for(String name : names){
System.out.println(name);
}
}</span>
注意:当File指定的是一个文件的时候,list()方法返回的是null
2)带过滤器的获取文件列表方法
<span style="font-size:14px;"> /**
*
* 功能描述:文件列表过滤器,列出指定目录下的所有.java文件
* @param args
*/
public static void main(String[] args) {
File f = new File("d:\\");
//File[] files = f.listFiles();//返回封装好的File
String[] names = f.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {//dir目录,name文件名
return name.endsWith(".java");
}
});
for(String name: names){
System.out.println(name);
}
}</span>
此处用匿名内部类的方式用FilenameFilter给返回的文件列表指定了返回的规则,即.java后缀的文件名才能被过滤
注意:返回封装好的File[]的listFiles()方法也有对应的过滤器,用法相同;
3)递归遍历一个目录下面的所有文件
示例代码:遍历D盘下面所有的文件<span style="font-size:14px;"> public static void main(String[] args) {
File f = new File("d:\\");
showAllFile(f);
}
/**
*
* 功能描述:遍历指定文件夹下面的所有文件
* @param args
*/
public static void showAllFile(File dir){
System.err.println(dir);
File[] files = dir.listFiles();
if(dir.isDirectory() && null != files){
for(File f: files){
if(f.isDirectory()){
showAllFile(f);
}else{
System.err.println(f);
}
}
}
}</span>
当指定的File是一个文件的时候dir.listFiles()返回的是null
4)递归删除指定目录下的所有文件,遵循先删除文件,后删除目录
<span style="font-size:14px;"> /**
* 功能描述:递归删除指定目录下的所有文件
* @param args
*/
public static void main(String[] args) {
File f = new File("d:\\aaa");
removeDir(f);
}
public static void removeDir(File dir){
File[] files = dir.listFiles();
if(null != files){
for(File f: files){
if(f.isDirectory()){
removeDir(f);
}else{
f.delete();
}
}
//删除文件夹下所有文件后,再把文件夹也删除
dir.delete();
}
}</span>
二.Properties 类
java.util.Properties 类是Hashtable的子类,有map 的特点,里面存储以字符串形式存在的键值对,
是集合和IO结合的产物,常用来操作配置文件。
常用的方法有:
getProperty(String key) 获取元素值
setProperty(String key, String value) 设置元素值
load(InputStream inStream) 和流相结合读取配置文件
store(OutputStream out, String comments) 和流结合,存储Properties的信息
stringPropertyNames() 获取所有键,返回set集合。
getProperty(String key)和setProperty(String key, String value)方法都很简单,
下面主要总结load、store、stringPropertyNames的用法:
setProperty(String key, String value) 设置元素值
load(InputStream inStream) 和流相结合读取配置文件
store(OutputStream out, String comments) 和流结合,存储Properties的信息
stringPropertyNames() 获取所有键,返回set集合。
getProperty(String key)和setProperty(String key, String value)方法都很简单,
下面主要总结load、store、stringPropertyNames的用法
1)stringPropertyNames 遍历所有Properties的键值对
示例代码<span style="font-size:14px;"> public static void main(String[] args) {
Properties p = new Properties();
p.setProperty("red", "红色");
p.setProperty("blue", "蓝色");
Set<String> ps = p.stringPropertyNames();
for(String prop : ps){
System.err.println("key:"+prop+" value:"+p.getProperty(prop));
}
}</span>
这里可以看出Properties对象的键值操作和map是一样的
2)load(InputStream inStream) 读取配置文件,用流和文件关联,再用load进行读取;
示例代码
<span style="font-size:14px;"> public static void main(String[] args) throws Exception{
Properties p = new Properties();
FileInputStream fi = new FileInputStream("Properties.properties");
p.load(fi);
Set<String> ps = p.stringPropertyNames();
for(String prop : ps){
System.err.println("key:"+prop+" value:"+p.getProperty(prop));
}
}</span>
这里Properties的对象读取了文件Properties.properties中的内容,之后将读取到的内容遍历打印
3)store(OutputStream out, String comments) 方法用来存储Properties信息,和流相结合
示例代码<span style="font-size:14px;"> public static void main(String[] args) throws Exception {
Properties p = new Properties();
FileOutputStream fo = new FileOutputStream("Properties.properties");
p.setProperty("aaa", "1");
p.setProperty("bbb", "2");
p.setProperty("ccc", "3");
p.store(fo, "");
}</span>
comments参数是注释,即输出文件中#开头的注释,这个参数可选
查看文件Properties.properties,可以看出里面的内容已经变成了
#
#Thu Aug 21 22:52:56 CST 2014
bbb=2
aaa=1
ccc=3