20、Math和File

一 Math类

1.1 Math类

java.lang.Math提供了一系列静态方法用于科学计算;其方法的参数和返回值类型一般为double型

  • abs:绝对值

  • acos,asin,atan,cos,sin,tan

  • sqrt:平方根

  • pow(double a, double b):a的b次幂

  • log:自然对数

  • exp:e为底指数

  • max(double a, double b)

  • min(double a, double b)

  • random():返回0.0到1.0的随机数

  • long  round(double a):double型的数据a转换为long型(四舍五入)

  • toDegrees(double angrad):弧度-->角度

  • toRadians(double angdeg):角度-->弧度

 

 

二 File类

2.1 File类

java.io.File类代表系统文件名(路径和文件名)

 

2.1.1 File类的常见构造方法

  • public File(String pathname):以pathname为路径创建File对象,如果pathname是相对路径,则默认的当前路径在系统属性user.dir中存储

  • public File(String parent,String child):以parent为父路径,child为子路径创建File对象

  • File的静态属性String separator存储了当前系统的路径分隔符

 

2.1.2 File常用方法

通过File对象可以访问文件的属性

  • public boolean canRead();

  • public boolean canWrite();

  • public boolean exists();

  • public boolean isDirectory();

  • public boolean isFile();

  • public boolean isHidden();

  • public long lastModified();

  • public String getName();

  • public String getPath();

 

通过File对象创建空文件或目录(在该对象所指的文件或目录不存在的情况下)

  • public boolean createNewFile() throws IOException

  • public boolean delete();

  • public boolean mkdir();

  • public boolean mkdirs();//创建在路径中的一系列目录

 

 

如下面一段代码

import java.io.*;

public class TestFile {
    public static void main(String[] args) {
        String separator = File.separator;
        String filename = "myfile.txt";
        String directory = "mydir1" + separator + "mydir2";
        File f = new File(directory, filename);
        if (f.exists()) {
            System.out.println("文件名: " + f.getAbsolutePath());
            System.out.println("文件大小: " + f.length());
        } else {
            f.getParentFile().mkdirs();
        }
    }
}

 

 

 

 

1.2 练习

编写一个程序,在命令行中以树状结构展现特定的文件夹及其子文件夹

import java.io.*;

public class FileList {
    public static void main(String[] args) {
        File f = new File("d:/A");
        System.out.println(f.getName());
        tree(f, 1);
    }


    private static void tree(File f, int level) {
        String preStr = "";
        for(int i=0; i<level; i++) {
            preStr += "    ";
        }

        File[] childs = f.listFiles();
        for(int i=0; i<childs.length; i++) {
            System.out.println(preStr + childs[i].getName());
            if(childs[i].isDirectory()) {
                tree(childs[i], level + 1);
            }
        }
    }
}

 

 

 

 

<think>我们之前已经讨论过 `aux_source_directory` `file(GLOB)` 的差异,但用户这次的问题简化为 `aux_source_directory` `file` 的差异。注意,`file` 命令是一个多功能命令,而 `file(GLOB)` 只是其中一种模式。因此,我们需要调整回答重点,强调 `aux_source_directory` `file` 命令(特别是 `file(GLOB)` 模式)的差异,因为问题中的 `file` 很可能是指用于收集文件的 `file(GLOB)`。 但是,为了严谨,我们也可以简要说明 `file` 命令的其他功能,但重点还是放在文件收集上。 回答结构: 1. 简要说明两个命令的用途。 2. 详细对比它们在文件收集方面的差异(即 `aux_source_directory` `file(GLOB)`)。 3. 提及 `file` 命令的其他功能(以说明它不仅仅用于收集文件,但主要差异点还是文件收集方式)。 注意:用户的问题中只写了“file”,但根据上下文(与aux_source_directory对比)之前的问题,我们默认指的是用于文件收集的`file(GLOB)`。但为了准确,我们可以这样表述: 在CMake中,`aux_source_directory` `file` 命令的 `GLOB` 模式(即 `file(GLOB)`)都可以用于收集源文件,但两者在实现方式行为上有显著差异。 然后列出差异,并总结。 同时,根据规则,在最后提出3-5个相关问题。 注意:必须严格按照格式输出,最后一行开始是“§§相关问题§§”,然后列出问题。 我们开始回答。</think>在 CMake 中,`aux_source_directory` `file` 命令(特别是其 `GLOB` 模式)都用于收集源文件,但存在根本性差异: ### 核心差异总结 | **特性** | `aux_source_directory` | `file` 命令 (重点 `GLOB`) | |------------------------|----------------------------------------|-----------------------------------| | **命令类型** | 专用命令(仅文件收集) | 多功能命令(20+种操作) | | **文件收集方式** | `aux_source_directory(<dir> <var>)` | `file(GLOB <var> [patterns...])` | | **匹配规则** | 自动匹配 CMake 预设的源文件扩展名 | 需显式指定通配符模式(如 `*.cpp`)| | **目录递归** | ❌ 仅当前目录 | ✅ 支持 `**` 递归(如 `src/**/*.c`)| | **文件过滤** | ❌ 无法排除特定文件 | ✅ 支持多模式/排除(`*.cpp;!test*`)| | **非文件操作** | ❌ 无 | ✅ 文件读写/下载/哈希/归档等 | ### 详细解析 1. **`aux_source_directory` - 单一功能命令** - **唯一用途**:自动收集目录中的源文件(`.c`, `.cpp`, `.cxx` 等) - **固定行为**: ```cmake aux_source_directory(src DIR_SRCS) # 自动收集src目录下所有源文件 ``` - **局限**:无法指定扩展名/过滤文件/递归子目录 2. **`file` - 多功能命令集** - **文件收集**(需显式使用 `GLOB`): ```cmake file(GLOB SOURCES "src/*.cpp") # 非递归 file(GLOB_RECURSE HEADERS "include/**/*.h") # 递归 ``` - **其他常用操作**: - 文件传输:`file(DOWNLOAD ...)` - 内容操作:`file(READ ...)`, `file(APPEND ...)` - 文件系统:`file(MAKE_DIRECTORY ...)`, `file(REMOVE ...)` - 路径处理:`file(REAL_PATH ...)` ### 关键注意事项 - **`aux_source_directory` 已过时**:CMake 官方明确建议避免使用(可能包含意外文件) - **`file(GLOB)` 的缓存问题**:默认只在配置阶段扫描一次,新增文件需手动重新生成 - **替代方案**:最佳实践是显式列出源文件: ```cmake set(SRCS src/main.cpp src/util.cpp lib/math.cpp ) # 明确可控,无隐藏风险 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值