A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

------<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的基本使用已经介绍完毕。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马