File

File类定义

  1. File类主要是JAVA为文件这块的操作(如删除、新增等)而设计的相关类
  2. File类的包名是java.io,其实现了Serializable, Comparable两大接口以便于其对象可序列化和比较
public class File implements Serializable, Comparable<File>
{
}

File类字段摘要

1) path :封装的String类型变量,代表了文件的路径

 private String path;
 public String getPath() 
{
        return path;
}

2) separatorChar:静态常量,代表了运行该程序的系统的路径分隔符,windows系统为"" ,linux系统为“/”

 public static void main(String[] args)
{
    System.out.println(File.separator); //在windows系统下运行结果为\
}
  1. separator :静态常量,是由separatorChar扩展而来的字符串型常量,运行结果和separatorChar一样
public static final String separator = "" + separatorChar;

4)pathSeparatorChar :静态常量,代表用于分割多个路径的系统分隔符。 在UNIX系统上,此字符为’:‘而 Windows系统上它是’;’

 public static void main(String[] args)
{
    System.out.println(File.pathSeparator); //运行结果为;
}

5)pathSeparator: 静态常量,由pathSeparatorChar扩展而来的字符串,运行结果和pathSeparatorChar一样

 public static final String pathSeparator = "" + pathSeparatorChar;

案例:

public static void main(String[] args) {
        File file = new File("D:\\java");
        System.out.println(file.getPath()); // D:\java
        System.out.println(File.separatorChar); // \
        System.out.println(File.separator); // \
        System.out.println(File.pathSeparatorChar); // ;
        System.out.println(File.pathSeparator); // ;
    }

File类构造函数

注意:构造函数只是创建一个File实例,并没有以文件做读取等操作,因此路径即使是错误的,也可以创建实例不报错

1)通过给定的字符串路径(一般是文件的绝对路径)转为抽象路径名用来创建File实例,当传入null时会抛出NullPointerException空异常错误

    public File(String pathname) {}

     File file=new File("xxx");
    System.out.println(file.getPath());  //路径结果就是xxx

2)从父路径名字符串和子路径名字符串(一般是相对父类的相对路径)创建新的File实例

public File(String parent, String child) {}

2.1) 若子路径child为Null,会抛出NullPointerException空异常错误
2.2) 当父路径为Null时,会以子路径child作为绝对路径创建实例,等同于调用第一个File(String child )效果一样

public static void main(String[] args)
{
     String parent=null; 
     File file=new File(parent,"xxx");
    System.out.println(file.getPath());  //路径结果就是xxx
}

2.3) 当父路径不为空时,会以父路径作为目录,子路径作为父路径下的目录或者文件名,最后得到的实例对象的路径就是父路径和子路径的组合

    public static void main(String[] args)
    {
        String parent = "E:/test";
        File parentFile= new File(parent);
        String child = "E:/test/1.txt";
        File file = new File(parentFile.getPath(), child);

        System.out.println(file.getPath()); // 路径结果就是E:\test\E:\test\1.txt
    }

3)通过父路径File实例对象和子路径字符串创建新的File实例,等同于上面的方法中把父路径字符串创建File实例然后传入一样

    public static void main(String[] args)
    {
        String parent = "E:/test";
        File parentFile= new File(parent);
        String child = "E:/test/1.txt"; 
        File file = new File(parentFile, child);
        
        System.out.println(file.getPath()); // 路径结果就是E:\test\E:\test\1.txt
    }

4)通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例

public File(URI uri) {}

总结:
1、File(File parent, String child) 根据 parent 抽象路径名和child 路径名字符串创建一个新 File 实例。
2、File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新File实例。
3、File(String parent, String child) 根据 parent 路径名字符串和child 路径名字符串创建一个新 File 实例。
4、File(URI uri) 通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的File 实例。

File类中的各种常用方法

1boolean canExecute() 测试应用程序是否可以执行此抽象路径名表示的文件。

2boolean canRead() 测试应用程序是否可以读取此抽象路径名表示的文件。

3boolean canWrite() 测试应用程序是否可以修改此抽象路径名表示的文件。

4int compareTo(File pathname) 按字母顺序比较两个抽象路径名。

5boolean createNewFile()当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。

6、staticFile createTempFile(String prefix, String suffix) 在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。

7、staticFile createTempFile(String prefix, String suffix, File directory) 在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。

8boolean delete() 删除此抽象路径名表示的文件或目录。

9void deleteOnExit() 在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。

10boolean equals(Object obj) 测试此抽象路径名与给定对象是否相等。

11boolean exists() 测试此抽象路径名表示的文件或目录是否存在。

12、File getAbsoluteFile() 返回此抽象路径名的绝对路径名形式。

13、String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。

14、File getCanonicalFile() 返回此抽象路径名的规范形式。

15、String getCanonicalPath() 返回此抽象路径名的规范路径名字符串。

16long getFreeSpace() 返回此抽象路径名指定的分区中未分配的字节数。

17、String getName() 返回由此抽象路径名表示的文件或目录的名称。

18、String getParent() 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回null。

19、File getParentFile() 返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回null。

20、String getPath() 将此抽象路径名转换为一个路径名字符串。

21long getTotalSpace() 返回此抽象路径名指定的分区大小。

22long getUsableSpace() 返回此抽象路径名指定的分区上可用于此虚拟机的字节数。

23int hashCode() 计算此抽象路径名的哈希码。

24boolean isAbsolute() 测试此抽象路径名是否为绝对路径名。

25boolean isDirectory() 测试此抽象路径名表示的文件是否是一个目录。

26boolean isFile() 测试此抽象路径名表示的文件是否是一个标准文件。

27boolean isHidden() 测试此抽象路径名指定的文件是否是一个隐藏文件。

28long lastModified() 返回此抽象路径名表示的文件最后一次被修改的时间。

29long length() 返回由此抽象路径名表示的文件的长度。

30、String[] list() 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。

31、String[] list(FilenameFilter filter) 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。

32、File[] listFiles() 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。

33、File[]listFiles(FileFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。

34、File[] listFiles(FilenameFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。

35、staticFile[] listRoots() 列出可用的文件系统根。

36boolean mkdir() 创建此抽象路径名指定的目录。

37boolean mkdirs() 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。

38boolean renameTo(Filedest) 重新命名此抽象路径名表示的文件。

39boolean setExecutable(boolean executable) 设置此抽象路径名所有者执行权限的一个便捷方法。

40boolean setExecutable(boolean executable, boolean ownerOnly) 设置此抽象路径名的所有者或所有用户的执行权限。

41boolean setLastModified(long time) 设置此抽象路径名指定的文件或目录的最后一次修改时间。

42boolean setReadable(boolean readable) 设置此抽象路径名所有者读权限的一个便捷方法。

43boolean setReadable(boolean readable, boolean ownerOnly) 设置此抽象路径名的所有者或所有用户的读权限。

44boolean setReadOnly() 标记此抽象路径名指定的文件或目录,从而只能对其进行读操作。

45boolean setWritable(boolean writable) 设置此抽象路径名所有者写权限的一个便捷方法。

46boolean setWritable(boolean writable, boolean ownerOnly) 设置此抽象路径名的所有者或所有用户的写权限。

47、String toString() 返回此抽象路径名的路径名字符串。

48、URI toURI() 构造一个表示此抽象路径名的 file:URI。

案例:

public static void main(String[] args) throws Exception {
        /*File file = new File("D:\\java");
        System.out.println(file.getTotalSpace());
        System.out.println(file.getFreeSpace());
        System.out.println(file.length());
        System.out.println(file.getPath()); // D:\java
        System.out.println(File.separatorChar); // \
        System.out.println(File.separator); // \
        System.out.println(File.pathSeparatorChar); // ;
        System.out.println(File.pathSeparator); // ;

        // 1)获取实例对象代表的文件名字(包含文件后缀)
        File file = new File("E:/test/1.txt");
        File file2 = new File("E:/test/异常1.jpg");
        File file3 = new File("xxx"); // 错误路径

        System.out.println(file.getName()); // 结果是1.txt
        System.out.println(file2.getName()); // 结果是异常1.jpg
        System.out.println(file3.getName()); // 结果是xxx

        // 2)获取实例对象代表的文件上级目录
        System.out.println(file.getParent()); // 结果是E:\test
        System.out.println(file2.getParent()); // 结果是E:\test
        System.out.println(file3.getParent()); // 结果是null

        // 3)获取实例对象的父项的实例对象,如果此路径名未指定父目录,
        // 则返回null;也就是获取对象的上级目录然后再实例化一个对象
        File file = new File("E:/test/1.txt");
        File file2 = new File("E:/test/异常1.jpg");
        File file3 = new File("xxx"); // 错误路径
        System.out.println(file.getParentFile()); // 结果是E:\test
        System.out.println(file2.getParentFile()); // 结果是E:\test
        System.out.println(file3.getParentFile()); // 结果是null

        // 4)获取实例对象代表的文件的实际路径
        File file = new File("E:/test/1.txt");
        File file2 = new File("E:/test/异常1.jpg");
        File file3 = new File("xxx"); // 错误路径
        System.out.println(file.getPath()); // 结果是E:\test\1.txt
        System.out.println(file2.getPath()); // 结果是E:\test\异常1.jpg
        System.out.println(file3.getPath()); // 结果是xxx

        // 5)检测该实例对象代表的文件的路径是否是绝对路径(windows系统中路径是以驱动盘开始的就是绝对路径)
        File file = new File("E:/test/1.txt");
        File file2 = new File("E:/test/异常1.jpg");
        File file3 = new File("xxx"); // 错误路径
        System.out.println(file.isAbsolute()); // 结果是true
        System.out.println(file2.isAbsolute()); // 结果是true
        System.out.println(file3.isAbsolute()); // 结果是false

        // 6)获取实例对象代表的文件的绝对路径
        File file = new File("E:/test/1.txt");
        File file2 = new File("E:/test/异常1.jpg");
        File file3 = new File("xxx"); // 错误路径

        System.out.println(file.getAbsolutePath()); // 结果是E:\test\1.txt
        System.out.println(file2.getAbsolutePath()); // 结果是E:\test\异常1.jpg
        System.out.println(file3.getAbsolutePath()); // 结果是D:\workspace\lettcode\xxx(编译器的工作空间作为解析目录了)

        // 7)实例对象代表的文件是否存在
        System.out.println(file.exists()); // 结果是true
        System.out.println(file2.exists()); // 结果是true
        System.out.println(file3.exists()); // 结果是false

        // 8)检测实例对象代表的是否是文件
        File file = new File("D:/java/1.txt");
        File file2 = new File("E:/test/异常1.jpg");
        File file3 = new File("xxx"); // 错误路径
        System.out.println(file.isFile()); // 结果是true
        System.out.println(file2.isFile()); // 结果是true
        System.out.println(file3.isFile()); // 结果是false

        // 9)检测实例对象代表的是否是目录
        System.out.println(file.isDirectory()); // 结果是false
        System.out.println(file2.isDirectory()); // 结果是false
        System.out.println(file3.isDirectory()); // 结果是false

        // 10)创建新文件--当且仅当实例对象代表的文件不存在时才可以创建新文件
        System.out.println(file.createNewFile()); // 结果是false,已经存在无法创建
        System.out.println(file2.createNewFile()); // 结果是false,已经存在无法创建
        System.out.println(file3.createNewFile()); // 结果是true,不存在可以创建 **创建的XXX文件的目录地址是以编译器的工作空间为上级目录加上创建实例对象的时候的路径名形成最后的路径

        // 11)删除实例对象代表的文件或目录,当代表目录时,必须目录下为空才可以删除
        File file = new File("E:/test/");
        File file2 = new File("E:/test/异常1.jpg");
        File file3 = new File("xxx"); // 错误路径
        System.out.println(file.delete()); // 结果是false,目录无法删除
        System.out.println(file2.delete()); // 结果是true,文件可以删除
        System.out.println(file3.delete()); // 结果是true,文件可以删除

        // 12)根据实例对象的路径名创建目录(若目录已存在,则false;若路径是文件,则fasle;若路径的上级目录不存在则false)

        File file = new File("E:/test1/");
        File file2 = new File("E:/test2/异常1.jpg");
        File file3 = new File("E:/ceshi");
        File file4 = new File("E:/ceshi2/2018");

        System.out.println(file.mkdir()); // false 因为test1目录已存在
        System.out.println(file2.mkdir()); // false,因为上级目录test2不存在
        System.out.println(file3.mkdir()); // true,因为ceshi目录不存在且是上级目录是E盘存在的
        System.out.println(file4.mkdir()); // false,因为ceshi2目录不存在,所以不成功

        // 13)根据实例对象的路径创建目录,包括创建那些必须的且不存在的父级目录
        File file = new File("E:/test1/");
        File file2 = new File("E:/test2/异常1.jpg");
        File file3 = new File("E:/ceshi");
        File file4 = new File("E:/ceshi2/zhagnsan");
        System.out.println(file.mkdirs()); // false 因为test1目录已存在
        System.out.println(file2.mkdirs()); // true,因为目录不存在所以可以创建,但注意生成的异常1.jpg是文件夹不是图片
        System.out.println(file3.mkdirs()); // true,因为目录不存在所以可以创建
        System.out.println(file4.mkdirs()); // true,因为目录不存在所以可以创建

        // 14) 获取实例对象代表的文件下的各级文件名和目录名,返回一个字符串数组
//         *         1.  当实例对象代表的是文件不是目录时,返回NUll对象
//         *         2.  获取的是该目录下的文件名和目录名,并不包含该目录名称和其上级目录名称
//         *         3.  字符串数组中都是文件名或目录名并不是路径名
//         *         4.  字符串中的元素并不是按照实际系统中目录下的顺序排列的
        File file2 = new File("E:/test");

        String[] list = file2.list();

        for (int i = 0; i < list.length; i++)
        {
            System.out.println(list[i]); // 结果为1.txt、xxx、工资表.xls、异常1.jpg、第一个目录、第三个目录
        }

        // 15)获取实例对象代表的文件下的各级文件名和目录名并指定过滤器进行过滤,返回一个字符串数组
//        1. 过滤器是FilenameFilter类对象,当传入null时,效果和list()方法一样
//        2. 过滤器是指过滤掉不符合名称的名字
//        3. FilenameFilter 是一个接口,因此需要自己新建一个类来实现该接口作为参数传入进去
//        4.仔细研究方法的源码可以发现,所谓过滤就是要重写FilenameFilter的accept方法并在方法中过滤

*/

        testFileOperation();

        // 图片,声音,图像
        ReadFileByByte("");
        ReadFileByChar("");

    }

    private static void testFileOperation() {
        // File类的字段
        // 与系统有关的路径分隔符
        System.out.println(File.pathSeparator);
        // 与系统有关的默认名称分隔符 (为了程序的可移植性,程序中的文件名称分隔符都应该使用separator)
        System.out.println(File.separator);


        // 创建一个文件对象
        File f = new File("E:\\123.txt");

        // 得到文件的路径
        System.out.println("文件路径:" + f.getAbsolutePath());
        // 得到文件的大小,字节数
        System.out.println("文件大小:" + f.length());

        // 创建文件和创建文件夹
        File f1 = new File("E:\\zxt.txt");
        // 文件不存在
        if (!f1.exists()) {
            // 创建
            try {
                f1.createNewFile();
            } catch (IOException ex) {
                ex.printStackTrace();
            }

        } else {
            // 有该文件 不创建
            System.out.println("文件已经存在,不用创建");
        }

        // 创建文件夹
        File f3 = new File("E:\\zxt");

        if (f3.isDirectory()) {
            System.out.println("文件夹存在");
        } else {
            // 创建
            f3.mkdir();
        }

        // 列出文件夹下的所有文件
        File f4 = new File("./");
        if (f4.isDirectory()) {
            File lists[] = f4.listFiles();
            for (int i = 0; i < lists.length; i++) {
                System.out.println("文件名:" + lists[i].getName());
            }
        }
    }

    /**   博客:https://blog.csdn.net/u013309870/article/details/52098414
     *
     * 四:文件输入输出操作中的FileInputStream(),InputStreamReader()的使用和差别。
     * FileInputStream ()是使用字节方式输入,InputStreamReader()字符方式输入。一般字节方式输入用来处理图片,声音,图像等二进制流。
     */

    public static String ReadFileByByte(String filepath) throws FileNotFoundException {
        File file = new File(filepath);
        StringBuffer sb = new StringBuffer();
        if (!file.exists() || !file.isFile()) {
            System.out.println("this file is not exist!");
            return null;
        }
        FileInputStream fileinputstream = new FileInputStream(file);
        byte[] temp = new byte[1024];
        try {
            while (fileinputstream.read(temp) != -1) {
                sb.append(new String(temp));

            }
            fileinputstream.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        // System.out.println(":"+sb.length());
        return sb.toString();
    }

    public static String ReadFileByChar(String filepath) {
        File file = new File(filepath);
        if (!file.exists() || !file.isFile()) {
            return null;
        }

        StringBuffer content = new StringBuffer();

        try {
            char[] temp = new char[1024];
            FileInputStream fileInputStream = new FileInputStream(file);
            InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
            while (inputStreamReader.read(temp) != -1) {
                content.append(new String(temp));
                temp = new char[1024];
            }

            fileInputStream.close();
            inputStreamReader.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return content.toString();
    }

参考:
java.io.File
JAVA基础知识之File类
Java中的File文件类详解
(十)java.io.File类详解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值