黑马程序员——File类

——- android培训java培训、期待与您交流! ———-

File类

定义:

文件和目录路径名的抽象表示形式。

此类的实例可能表示(也可能不表示)实际文件系统对象,如文件或目录。 
如果它表示这种对象,那么该对象驻留在一个分区 中。 
分区是文件系统特定于操作系统的存储分区。 
一个存储设备(例如,物理磁盘驱动器、闪存、CD-ROM)可以包含多个分区。 
对象(如果有)将驻留在此路径名(绝对形式)某个祖先指定的分区上。 

文件系统可以实现对实际文件系统对象上的某些操作(比如,读、写、执行)进行限制。 
这些限制统称为访问权限。文件系统可以对一个对象设置多个访问权限。例如,
一个设置可能适用于对象的所有者,另一个设置则可能适用于所有其他用户。 
对象上的访问权限可能导致此类的某些方法执行失败。 

File 类的实例是不可变的;也就是说,一旦创建,File 对象表示的抽象路径名将永不改变。

File类的常用方法:

1.创建:
createNewFile()在指定位置创建文件,如果文件不存在则返回true,如果文件存在则返回false,
与输出流不同,输出流对象一直在创建文件,如果文件存在在,则覆盖。
2.删除:
boolean delete();删除失败返回false,如果文件正在使用,则删除不了返回false;
void deleOnExit()在退出程序时删除指定文件
3.判断:
boolean exists()文件是否存在
boolean isFile()是不是文件
boolean isDirectory()是不是目录
4.获取信息
getName()  返回由此抽象路径名表示的文件或目录的名称。
getPath()将此抽象路径名转换为一个路径名字符串。
String getParent() 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
getAbsolutePath()返回此抽象路径名的绝对路径名字符串。

功能概述:

*用来将文件或者文件夹封装成对象
*方便对文件与文件夹进行操作
*File对象可以作为参数传递给流的构造函数

示例1:在电脑上硬盘创建指定目录的文件,如果文件夹不存在,则创建文件夹

我们用到的构造函数:

File(String pathname) 
      通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。 
File(String parent, String child) 
      根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。 

我们要用到的方法:

boolean exists() 
      测试此抽象路径名表示的文件或目录是否存在。 
   boolean mkdir() 
      创建此抽象路径名指定的目录。 
 boolean mkdirs() 
      创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。 
       File getParentFile() 
      返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。 

代码:

import java.io.File;
import java.io.IOException;

public class CreateFileDemo {
    private void createFileDemo(){
        //在程序编写目录下创建文件
        File fi = new File("woshiku123.txt");
        //在指定文件下创建文件
        File fiOne = new File("c:\\ko","wo.txt");
        //判断文件是否存在,不存在创建文件
        if(!fi.exists()){
            try {
                fi.createNewFile();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        //判断文件是否存在,不存在创建文件
        if(!fiOne.exists()){
            //文件不存在拿到父亲的地址创建文件夹
            fiOne.getParentFile().mkdirs();
            try {
                fiOne.createNewFile();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new CreateFileDemo().createFileDemo();
    }

}

示例二:getPath()与getAbsolutePath()与getParent(),进C盘下的一文件剪切到D盘

剪切文件用到的方法:

public boolean renameTo(File dest)重新命名此抽象路径名表示的文件。 
此方法行为的许多方面都是与平台有关的: 
重命名操作无法将一个文件从一个文件系统移动到另一个文件系统, 
该操作不是不可分的,如果已经存在具有目标抽象路径名的文件, 
那么该操作可能无法获得成功。应该始终检查返回值, 
以确保重命名操作成功。
import java.io.File;

public class CreateFileDemo {

    private void test(){
        File fi = new File("c:\\puke\\woshiku.txt");
        System.out.println(fi.getPath());
        System.out.println(fi.getParent());
        System.out.println(fi.getAbsolutePath());
        File fiOne = new File("woshiku.txt");
        System.out.println(fiOne.getPath());
        System.out.println(fiOne.getParent());
        System.out.println(fiOne.getAbsolutePath());
        cutFile("c:\\puke\\nazi.jpg","d:\\nazi.jpg");

    }
    private void cutFile(String cdir,String ddir){
        File fi = new File(cdir);
        File fiOne = new File(ddir);
        //剪切文件
        System.out.println(fi.renameTo(fiOne));
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new CreateFileDemo().test();
    }

}

这里写图片描述
对于程序员来说有时候写了太多的程序文件,又有太多文件夹想找到具体文件,很是苦恼,所以我们可以做个类似索引的文件,把文件夹的所用数据全部都写到记事本中,然后在记事本直接输入文件名,便可以找到具体地址,是不是很方便!
要求:指定文件夹,然后把该文件夹下的所有文件的绝对路径写到记事本中以便于查找

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;



public class CreateFileDemo {
    private static List<String> list;
    private static void lookFile(String path){
        File fi = new File(path);
        File []files = fi.listFiles();
        System.out.println(fi.getAbsolutePath());
        for(File file:files){
            if(file.isDirectory()){
                lookFile(file.getAbsolutePath());
            }else{
                list.add(file.getAbsolutePath());
                System.out.println(file.getAbsolutePath());
            }
        }
    }
    //写文本文件把要保存的数据记录下来
    private static void saveData(List<String> list){
        try {
            PrintWriter fos = new PrintWriter(new FileWriter("save.txt"));
            //读取数据
            for(String line:list){
                fos.println(line);
                fos.flush();
            }
            fos.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        list = new ArrayList<String>();
        lookFile("G:\\code\\exam");
        saveData(list);
    }

}

这里写图片描述
既然能查找所有文件那我能不能只输出我指定后缀文件输出呢?
答案是可以的,File类提供了一个很好方法,来取得我们想的文件
File[] listFiles(FilenameFilter filter)

      返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。 

要求:输入目录,查找出我们指定后缀的所有文件,并保存到txt中

import java.io.File;
import java.io.FileFilter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;



public class CreateFileDemo {
    private static List<String> list;
    //满足后缀名查找
    private static void lookFile(String path,final String suff){
        File fi = new File(path);
        //加入过滤器,后缀名满足则输出
        File []files = fi.listFiles(new FileFilter() {

            @Override
            public boolean accept(File pathname) {
                // TODO Auto-generated method stub
                //只有是文件进行判断
                if(!pathname.isDirectory()){
                    if(pathname.getAbsolutePath().endsWith(suff)){
                        return true;
                    }else{
                        return false;
                    }
                }
                return true;
            }
        });
        System.out.println(fi.getAbsolutePath());
        for(File file:files){
            if(file.isDirectory()){
                lookFile(file.getAbsolutePath(),suff);
            }else{
                list.add(file.getAbsolutePath());
                System.out.println(file.getAbsolutePath());
            }
        }
    }
    //写文本文件把要保存的数据记录下来
    private static void saveData(List<String> list){
        try {
            PrintWriter fos = new PrintWriter(new FileWriter("save.txt"));
            //读取数据
            for(String line:list){
                fos.println(line);
                fos.flush();
            }
            fos.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        list = new ArrayList<String>();
        //后缀名设置java
        lookFile("G:\\code\\exam","java");
        saveData(list);
    }

}

这里写图片描述
windows上删除文件夹,会把文件夹里面所包含的文件以及文件夹全部删除,是怎么做到的呢?上面我进行了查找,我们能找到文件夹中的所有`文件,通过这些文件我们获得了文件对象那么删除文件,调用这些文件的删除方法是不是就可以了呢?答安是可以的下面我们就来展示一下删除文件夹里面的数据。
示例:删除指定文件夹下的所有文件

import java.io.File;

public class CreateFileDemo {
    //删除文件
    private static void deleFile(String path){
        File fi = new File(path);
        //拿到文件夹下的列表
        File []files = fi.listFiles();
        for(File file:files){
            //如果是目录进行再查找
            if(file.isDirectory()){
                //进行递归
                deleFile(file.getAbsolutePath());
            }else{
                //删除文件
                file.delete();
            }
        }
        fi.delete();
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //删除指定文件夹
        deleFile("C:\\xiaoshuowu\\org1");
    }
}

——- android培训java培训、期待与您交流! ———-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值