• File类的基本使用


    java.io

    类 File

    java.lang.Object
    java.io.File
    
    所有已实现的接口:
    Serializable, Comparable<File
    public class File extends Objectimplements Serializable, Comparable<File>
    
    

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

    用户界面和操作系统使用与系统相关的路径名字符串 来命名文件和目录。此类呈现分层路径名的一个抽象的、与系统无关的视图。抽象路径名 有两个组件:

    1. 一个可选的与系统有关的前缀 字符串,比如盘符,"/" 表示 UNIX 中的根目录,"\\" 表示 Microsoft Windows UNC 路径名。
    2. 零个或更多字符串名称 的序列。
    抽象路径名中的第一个名称是目录名,对于 Microsoft Windows UNC 路径名则是主机名。抽象路径名中第一个名称之后的每个名称表示一个目录;最后一个名称既可以表示目录,也可以表示文件。 抽象路径名没有前缀和名称序列。 

     

    1、构建File对象

    查看相关的API文档 (jdk1.60)

    构造方法摘要
    File(File parent, String child)
              根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
    File(String pathname)
              通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
    File(String parent, String child)
              根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
    File(URI uri)
              通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。

    代码:

     1 package 测试io;
     2 
     3 import java.io.File;
     4 
     5 /**
     6  * 获取文件的几个常见方法
     7  * @author liuzeyu12a
     8  *
     9  */
    10 
    11 public class FileDemo001 {
    12 
    13     public static void main(String[] args) {
    14 
    15         String path = "E:/JAVA";
    16         /**
    17          * 构建File对象
    18          */
    19         // 方法1
    20         File file = new File(path);
    21         System.out.println(file);
    22 
    23         // 方法2
    24         file = new File("E:", "Java");
    25         System.out.println(file);
    26 
    27         // 方法3
    28         file = new File(new File("E:/"), "java");
    29         System.out.println(file);
    30 
    31     }
    32 
    33 }
    View Code

    1.1 文件状态(存在 ?目录 : 文件 )

    代码:

     1 package 测试io;
     2 
     3 import java.io.File;
     4 
     5 /**
     6  * 操作文件状态
     7  * 文件状态 1、不存在: exists 
     8  * 2、存在 文件: isFile 
     9  * 文件夹: isDirectory
    10  *
    11  */
    12 public class FileDemo03 {
    13 
    14     public static void main(String[] args) {
    15         File src = new File("IO.png");
    16         System.out.println(src.getAbsolutePath());
    17         System.out.println("是否存在:" + src.exists());
    18         System.out.println("是否文件:" + src.isFile());
    19         System.out.println("是否文件夹:" + src.isDirectory());
    20 
    21         src = new File("IO.png");
    22         System.out.println("----------");
    23         System.out.println("是否存在:" + src.exists());
    24         System.out.println("是否文件:" + src.isFile());
    25         System.out.println("是否文件夹:" + src.isDirectory());
    26 
    27         src = new File("D:\java300\IO_study01");
    28         System.out.println("----------");
    29         System.out.println("是否存在:" + src.exists());
    30         System.out.println("是否文件:" + src.isFile());
    31         System.out.println("是否文件夹:" + src.isDirectory());
    32 
    33         // 文件状态
    34         src = new File("xxx");
    35         if (null == src || !src.exists()) {
    36             System.out.println("文件不存在");
    37         } else {
    38             if (src.isFile()) {
    39                 System.out.println("文件操作");
    40             } else {
    41                 System.out.println("文件夹操作");
    42             }
    43         }
    44 
    45     }
    46 
    47 }
    View Code

    1.2文件对象的一些其他的方法
    代码:

     1 package 测试文件;
     2 
     3 import java.io.File;
     4 import java.io.IOException;
     5 import java.util.Date;
     6 
     7 public class TestFile1 {
     8 
     9     public static void main(String[] args) throws IOException {
    10         File f = new File("e://bbb.txt");
    11         f.createNewFile(); // 创建文件
    12         System.out.println(f.isDirectory()); // 是否为目录
    13         System.out.println(f.getAbsoluteFile()); // 获取绝对路径
    14         System.out.println(f.isFile()); // 是否为文件
    15         System.out.println(new Date(f.lastModified())); // 最后修改时间
    16         System.out.println(f.getName());
    17         System.out.println(f.length());
    18         System.out.println(f.getPath());
    19 
    20         f.renameTo(new File("222.txt")); // 改名
    21         System.out.println(System.getProperty("user.dir")); // 获取当前工作空间
    22 
    23         // 理解mkdir,mkdirs
    24         File f2 = new File("e:/haha/xixi");
    25         boolean flag = f2.mkdir(); // 目录少一个就不创建
    26         boolean flag2 = f2.mkdirs(); // 没有即创建
    27         System.out.println("mkdir创建" + flag + "
    " + "mkdirs创建" + flag2);
    28 
    29     }
    30 }
    View Code

    2、路径的表示

    1windows 下面的路径分隔符必须使用 \ 进行转义,Linuix上面的文件系统使用  /

    所以为了养成好的编码习惯,建议使用:

    1) /

    2)使用File常量 separator 拼接.

    代码:

     1 package 测试io;
     2 
     3 import java.io.File;
     4 
     5 /**
     6  * 路径,分隔符 /  
     7  * @author liuzeyu12a
     8  *
     9  */
    10 
    11 /**
    12  * 数据源----->程序:这个过程称为读 程序----->界面:这个过程称为写
    13  * 
    14  * @author liuzeyu12a
    15  *
    16  */
    17 public class PathDemo001 {
    18 
    19     /**
    20      * 分割符:separator
    21      * 
    22      * @param args
    23      */
    24     public static void main(String[] args) {
    25 
    26         // 如果使用:
    27         System.out.println(File.separator); // 输出:反斜杠
    28         // 在window 里面要使用转义字符进行转义,如
    29         String path = "E:\JAVA";
    30         // 如果使用separator就可以不用,我们使用拼接
    31         path = "E:" + File.separator + "Java";
    32 
    33         // 建议使用:/
    34         path = "E:/JAVA";
    35     }
    36 
    37 }
    View Code

    2.1 绝对路径 与  相对路径

    相对路径与绝对路径 判断规则: 

    1)存在盘符:绝对路径 
    2)不存在盘符,当前路径user.dir

    代码:

     1 package 测试io;
     2 
     3 import java.io.File;
     4 
     5 /**
     6  * 相对路径与绝对路径 判断规则: 
     7  * 1)存在盘符:绝对路径 
     8  * 2)不存在盘符,当前路径user.dir
     9  * 
    10  * @author liuzeyu12a
    11  *
    12  */
    13 public class FileDemo002 {
    14 
    15     public static void main(String[] args) {
    16 
    17         // 绝对路径
    18         String path = "E:/JAVA/北京尚学堂";
    19         File file = new File(path);
    20         System.out.println(file.getAbsolutePath());
    21 
    22         // 相对路径
    23         // 输出当前的工作空间路径
    24         System.out.println(System.getProperty("user.dir"));
    25         file = new File("IO.png"); // 相对于工作空间
    26         System.out.println(file.getAbsolutePath()); // 此时创建了一个不存在的路径
    27     }
    28 
    29 }
    View Code

     3、递归实现文件目录的查看

     递归体:

        //level 表示文件目录的层次
        public static void printFile(File f, int level) {
            for (int i = 0; i < level; i++)
                System.out.print("-");
            System.out.println(f.getName());
            if (f.isDirectory()) {
                File[] files = f.listFiles();
                for (File temp : files) {
                    printFile(temp, level + 1);
                }
            }
        }

    实现代码:

    package 测试文件;
    import java.io.File;
    public class PrintFile1 {
    
        public static void main(String[] args) {
    
            File f = new File("E:\JayChou地表最强泉州站");
            printFile(f, 0);
        }
    
        //level 表示文件目录的层次
        public static void printFile(File f, int level) {
            for (int i = 0; i < level; i++)
                System.out.print("-");
            System.out.println(f.getName());
            if (f.isDirectory()) {
                File[] files = f.listFiles();
                for (File temp : files) {
                    printFile(temp, level + 1);
                }
            }
        }
    }

    *扩展延伸,利用面向对象思想统计文件的个数和文件夹的个数

     1 package 测试io;
     2 
     3 import java.io.File;
     4 
     5 public class FileDirDemo01 {
     6 
     7     // 文件夹长度
     8     private int len;
     9     // 文件夹路径
    10     private String path;
    11     // 文件夹个数
    12     private int dirSize;
    13     // 文件个数
    14     private int fileSize;
    15 
    16     // 文件源
    17     private File src;
    18 
    19     // 构造方法,创建file对象
    20 
    21     public FileDirDemo01(String path) {
    22         this.path = path;
    23         this.src = new File(path);
    24         dirCount(this.src);
    25     }
    26 
    27     public static void main(String[] args) {
    28         FileDirDemo01 dirDemo = new FileDirDemo01("E:\JAVA\workspac\BF算法与KMP算法");
    29         System.out.println("文件夹大小" + dirDemo.len + "文件个数" + dirDemo.fileSize + "文件夹个数" + dirDemo.dirSize);
    30     }
    31 
    32     //文件计数,文件夹
    33     public void dirCount(File f) {
    34 
    35         if (f.exists() && f != null) {
    36 
    37             if (f.isFile()) {
    38                 len += f.length();
    39                 this.fileSize++; // 文件个数
    40             } else {
    41                 this.dirSize++;
    42                 for (File flies : f.listFiles()) {
    43                     dirCount(flies);
    44                 }
    45             }
    46         }
    47     }
    48 
    49 }
    View Code

    学习参考jdk 1.60 文档

    学完时间隔了好久 总感觉要把IO这块总结一下,学到脑子一团糊。写的不好的地方望大佬可以指出。

  • 相关阅读:
    国密算法 SM3 摘要计算 java版
    《Java架构师的第一性原理》41存储之MySQL第10篇数据库切分
    《Java架构师的第一性原理》41存储之MySQL第9篇MySQL主从复制
    《Java架构师的第一性原理》41存储之MySQL第8篇索引
    《Java架构师的第一性原理》41存储之MySQL第7篇SQL执行原理
    《Java架构师的第一性原理》41存储之MySQL第5篇事务
    《Java架构师的第一性原理》41存储之MySQL第6篇锁
    《Java架构师的第一性原理》41存储之MySQL第4篇MySQL日志系统(BinLog、RedoLog、UndoLog)
    《Java架构师的第一性原理》41存储之MySQL第3篇存储引擎MyISAM、InnoDB
    《Java架构师的第一性原理》41存储之MySQL第2篇MySQL逻辑架构
  • 原文地址:https://www.cnblogs.com/liuzeyu12a/p/10394864.html
Copyright © 2020-2023  润新知