------<a target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
File概述
File:把文件或文件夹封装成对象的类,方便对文件或文件夹的属性进行操作。
流只能操作数据,要想操作流对应的文件信息,只能用File对象。
File.Separator:目录分隔符,可以跨平台使用。
File的基本操作:
1.创建
Boolean createNewFile():在指定位置创建文件,若已经存在,则不创建,返回false,若不存在,则创建,返回true。
与输出流的创建是不一样的。
Boolean makedir():创建此抽象路径名指定的目录。
Boolean makedirs():创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
2.删除
boolean delete():删除此抽象路径名表示的文件或目录。
Void deleteOnExit():在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。
一个文件在被流操作的时候是不能被删除的。
以下演示上述两个方法的使用:
import java.io.File;
import java.io.IOException;
public class FileDelete {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
File file=new File("D:\\SHDownload1");//创建File对象
if(!file.exit())
file.mkdir();//生成目录
deleDemo(file);//调用删除方法删除文件夹
}
public static void deleDemo(File file){
File[] files=file.listFiles();//获取文件夹的目录
for( int i=0;i<files.length;i++){//先删除文件夹的目录内容
if(files[i].isDirectory()){//判断目录是不是文件夹
deleDemo(files[i]);//是的话迭代调用
}else{
files[i].delete();//不是的话直接删除
}
}
file.delete();//最后将文件夹删除
}
}
3.判断
对一个文件进行是否是文件或目录的时候,一定要先判断这个文件或对象是否存在。用exits()方法判断。
boolean canExecute():测试应用程序是否可以执行此抽象路径名表示的文件。
boolean isFile(): 测试此抽象路径名表示的文件是否是一个标准文件。
boolean isDirectory():测试此抽象路径名表示的文件是否是一个目录。
boolean isAbsolute():测试此抽象路径名是否为绝对路径名。
boolean isHidden():测试此抽象路径名指定的文件是否是一个隐藏文件。
4.获取信息
getParent():返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null
getAbsolutePath():返回此抽象路径名的绝对路径名字符串。
getAbsoluteFile():返回此抽象路径名的绝对路径名形式
getPath():将此抽象路径名转换为一个路径名字符串
下面这个例子演示了获取一个文件夹的java文件
import java.io.*;
import java.util.*;
public class FindJavaFile {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
File file=new File("d:\\eclipse");//创建File对象
List<File> list=new ArrayList<File>();//创建一个list来存取文件对象
fileToList(file,list);//调用方法列出文件存入list
Iterator<File> iterator=list.iterator();//获取list在迭代器
while(iterator.hasNext()){//遍历迭代器后打印出相应的结果
System.out.println(iterator.next());
}
System.out.println(list.size());//打印集合大小
writeToFile(list,"javafile.doc");
}
public static void fileToList(File file,List<File> list){
File[] files=file.listFiles();
for(File s : files ){
if(s.isDirectory()){//若是文件夹则迭代调用这个方法
fileToList(s,list);
}
else{
if(s.getName().endsWith(".java"))//判断文件是否是java文件
list.add(s);//是的话加入list集合当中
}
}
}
public static void writeToFile(List<File> list,String file){
BufferedWriter bufw=null;//创建缓冲写入流
try {
FileWriter fw=new FileWriter(new File(file));//获取文件的字符串写入流
bufw=new BufferedWriter(fw);//把得到的流与创建的缓冲流相关联 是为了提高写入效率
for(File f: list){//遍历list中的文件
bufw.write(f.getAbsolutePath());//获取某个文件的绝对路径
bufw.newLine();加入换行符
bufw.flush();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
if(bufw!=null){
try {
bufw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
获取文件的路径的时候是不需要判断具体文件是否存在的。
renameTo(File file):重新命名此抽象路径名表示的文件。
List():获取所有的文件包括隐藏文件 ,它是封装了一个目录,而且这个目录是必须存在的。
在windows中,删除目录用的是从内向外的方法的。当一个文件夹不是空文件夹的时候,delete()方法是不起作用的。
Properties是HashTable的子类,具有map集合的特点,且它存储的键值对都是字符串。是集合中与io相结合的集合文件。
该对象的特点:具备键值对形式的配置文件 。
在加载数据时,需要数据有固定的格式 : 键=值
以下 演示Properties的存取:
import java.util.Properties;
import java.util.Set;
public class PropertiesDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
setAndGet();
}
public static void setAndGet(){
Properties prop=new Properties();//创建一个Properties
prop.setProperty("zhangsan", "30");//往里添加键值对
prop.setProperty("lisi","39");
System.out.println(prop);//打印这个 Properties
String value=prop.getProperty("zhangsan");//根据键获取对应的值
System.out.println(value);
Set<String> s=prop.stringPropertyNames();//获取所有的键值
for(String a:s){
System.out.println(a);
}
}
}
因为Properties是为了解决文件与属性的方法而存在的,是与IO流相结合的容器,在加载的时候有一定的固定的格式 。以下的方法演示了如何从文件中存取配置信息:(前提是文件中的数据是一定要有固定的格式的)
public static void loadDemo() throws Exception{
FileInputStream in=new FileInputStream("info.txt");//创建文件输入流
Properties prop=new Properties();//创建集合对象
prop.load(in);//加载对应的文件
prop.list(System.out);//列出来
prop.setProperty("wang", "98");//修改文件中的属性
FileOutputStream fos=new FileOutputStream("info.txt");//获取输出流到原始文件,使得属性更新
prop.store(fos, "这是一条注释信息,是不加载的");
fos.close();//关闭流对象
in.close();
}
以下演示Properties的一个具体应用:使用到一定的次数则提醒不能继续使用了:
import java.io.*;
import java.util.Properties;
public class RunCount {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
File file=new File("demo.txt");//建立一个文件对象
if(!file.exists())//判断这个对象 是否存在,不存在则创建它
file.createNewFile();
FileInputStream fis=new FileInputStream(file);//创建输入流与这个文件相关联
Properties prop=new Properties();//创建集合并加载输入流
prop.load(fis);
int count=0;//把使用次数初始为0
String value=prop.getProperty("time");//获取一个键值对
if(value!=null){//若键对应的有值,说明已经使用过,把count变为存储了的值
count=Integer.parseInt(value);
if(count>=5){//判断使用是否达到或超过5次
System.out.println("您使用的次数已经5次了!");
return ;
}
}
count++;//把使用次数加1
prop.setProperty("time",count+"");//更新配置文件
FileOutputStream fos=new FileOutputStream(file);//获取输出 流与配置文件相关联
prop.store(fos, "");//更新配置文件
fis.close();//关闭流资源
fos.close();
}
}
至此,File与Properties的基本使用已经介绍完毕。 |
|