空文件构造函数既不是文件也不是目录

2024-02-05

以下两种创建文件的方法有什么区别?

new File(System.getProperty("user.dir"));
new File("");

Java 将第一个识别为目录,第二个识别为目录既不是文件也不是目录!为什么会这样?


Code:

public class MainClass {
    public static void main(String[] args) throws Exception {       
        System.out.println("File Created with CurrentDir taken From System Props");
        File f1 = new File(System.getProperty("user.dir"));
        System.out.println("Absolute Path: " + f1.getAbsolutePath());
        System.out.println("isDirectory: " + f1.isDirectory());
        System.out.println("isFile: " + f1.isFile());

        System.out.println();

        System.out.println("File Created with Empty String Path");
        File f2 = new File("");
        System.out.println("Absolute Path: " + f2.getAbsolutePath());
        System.out.println("isdirectory: " + f2.isDirectory());
        System.out.println("isFile: " + f2.isFile());       
    }
}

Output:

File Created with CurrentDir taken From System Props
Absolute Path: D:\Java Workspace\my_Workspace\JavaTest
isDirectory: true
isFile: false

File Created with Empty String Path
Absolute Path: D:\Java Workspace\my_Workspace\JavaTest
isdirectory: false
isFile: false

解释

可能看起来有点非直观的但实际上这就是课堂的样子应该可以工作根据其文档 https://docs.oracle.com/javase/10/docs/api/java/io/File.html。它被称为空抽象路径名在文档中:

空的抽象路径名没有前缀和空名称序列.

从你的构造函数中File#File(String):

通过将给定路径名字符串转换为抽象路径名来创建新的 File 实例。如果给定的字符串是空字符串,则结果是空抽象路径名.

So the File类实际上解释了空名作为真实姓名。当你测试时File#isDirectory() or File#isFile()因此它检查是否存在像这样的文件或目录

D:\Java Workspace\iTAW_Workspace\JavaTest\<empty>

请注意<empty>我写它是为了表明它实际上在这里搜索一个文件空名。显然这样的文件不可能存在,因此结果将始终是false。再说一次,它不检查

D:\Java Workspace\iTAW_Workspace\JavaTest\

而是空的文件在此目录中,该目录不存在。

不幸的是,您在使用时看不到这一点File#toAbsolutePath()方法,因为没有表示空名.


NIO

请注意,该类File和它相关的一切都是outdated。现在文件IO是使用NIO来完成的Files, Paths and Path。这个 API 更加干净和直观。它也将按照您当前示例的预期工作:

Files.isDirectory(Paths.get("")); // true

看看文档 https://docs.oracle.com/javase/10/docs/api/java/nio/file/Files.html了解更多。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

空文件构造函数既不是文件也不是目录 的相关文章

随机推荐

  • 容器化 C# Winforms 应用程序

    我有一个独立的 Winform 应用程序 可以将其容器化到 docker 中 docker支持基于UI的应用程序吗 我是否需要 docker 来测试应用程序 对的 这是可能的 您将能够使用以下方式将其容器化https hub docker
  • 角度指令绑定到元素的高度

    我对 Angular 相当陌生 希望能够绑定到元素的高度 在我目前的情况下 我想绑定CSSbottom on el1达到el2 它们不共享公共控制器 我怎样才能做到这一点 div div div style height 573px div
  • 在 Pyramid Web 框架中,如何将敏感设置从外部文件导入到development.ini / Production.ini 中?

    我想保留development ini and production ini在版本控制下 但出于安全原因不希望sqlalchemy url要存储的连接字符串 因为这将包含用于数据库连接的用户名和密码 在 Pyramid 中 从其他外部文件获
  • 将 UILabel 的文本设置为粗体

    我想让 UILabel 的文本变为粗体 infoLabel UILabel alloc initWithFrame CGRectMake 90 150 200 30 infoLabel setText Drag 14 more Flavor
  • 创建订购和结帐系统,防止付款期间更改购物车

    因此 我有一个多页结账系统 它依赖于会话来存储购物车的内容 我还使用第三方系统来处理信用卡 该系统在其服务器上托管实际的支付页面 我只需将最终总数发布到页面即可 我预见的问题是 如果有人点击进入托管支付页面 然后出于某种合法或邪恶的原因更改
  • urlManager 在 Yii 2.0 中不工作

    我正在尝试学习 yii 2 0 目前我正在使用basicyii 2 0 版本 第一步是配置 url 所以根据指南 我启用了mod rewrite 使用检查它phpinfo 然后在中添加以下行components of config web
  • 将 'yyyymmdd hhmmss' 转换为 'mm/dd/yy hh:mm'

    我有一行数据 单元格 A3 及以下 其中包含 Unix 时间戳yyyymmdd hhmmss我试图转换成的格式mm dd yy hh mm format 自动地 当我的数据从单元格 A1 开始时 到目前为止 我的代码可以工作 但我需要 A1
  • 如何在集合获取中保留自定义属性

    我有一个 资产 骨干模型 它有一个名为 选定 的自定义属性 它是自定义的 因为它不是服务器端对象的一部分 我用它来表示用户当前选择的资产列表中的哪一个 var Asset Backbone Model extend defaults sel
  • 从 Spring Boot 应用程序运行 KSQL 的方式是什么

    我有一个连接到 kafka 集群的 Spring Boot 应用程序 如何从 java 代码运行 KSQL 目前 还没有直接的方法在java中使用KSQL作为库 有一个开放的问题 734 https github com confluent
  • Highcharts TypeScript,y 轴标签

    请参考讨论Highcharts y 轴文本标签 https stackoverflow com questions 4987457 highcharts text labels for y axis设置y轴标签的方法 I used http
  • GWT UiBinder 和图像精灵

    我无法让 CSS 图像精灵出现在 GWT UiBinder 中 我做了评论如何在 GWT 中使用图像精灵 https stackoverflow com questions 4535094 how do i use image sprite
  • 如何创建与环境无关的 JavaScript 库

    我正在创建一个 javascript 库 我希望它与环境无关 它不会使用 DOM AJAX 或 NodeJS api 它将是普通的 javascript 因此 它应该可以在任何 javascript 环境中运行 浏览器 npm meteor
  • 12因素应用程序存储配置的过程是什么?

    所以我一直将我的应用程序主要构建为 12 因素应用程序 现在查看配置部分 目前 我有用于开发和生产的单独配置文件 通过构建过程 我们可以构建开发或生产映像 代码 100 相同 唯一改变的是配置 现在我 100 明白 在 12 因素应用程序中
  • C++中iostream头的cout、cerr、clog有什么区别?什么时候使用哪一个?

    我尝试研究之间的区别cout cerr and clog在互联网上但找不到完美的答案 我仍然不清楚何时使用哪个 谁能通过简单的程序向我解释并说明何时使用哪个程序的完美情况 我参观过这个网站 http www tutorialspoint c
  • 嵌套向量与连续数组的性能影响

    是否有任何可靠的测试可以清楚地显示访问和写入嵌套向量与 C 内置数组之间的性能差异 我听说 与访问单个数组中的元素 所有元素都存储在连续的内存中 相比 使用嵌套 多维 向量通常会产生一些性能开销 但这对我来说似乎都是假设的 我还没有看到任何
  • Blazor 启动错误:System.Threading.SynchronizationLockException:无法在此运行时上等待监视器

    我试图在 blazor 客户端 启动期间调用 api 将语言翻译加载到 ILocalizer 中 此时 我尝试从获取请求中获取 Result blazor 会在标题中抛出错误 这可以通过在program cs中调用此方法来复制 privat
  • Socket.io 不在 /socket.io/socket.io.js 中提供服务

    我已经在这里阅读了有关我的 node js 问题的答案 但我的问题仍然存在 在服务器中使用socket io 一切看起来都正常 但在客户端 chrome 说 无法加载资源 服务器响应状态为 404 未找到 本地主机 3382 so cket
  • 两个向量的欧氏距离

    如何找到两个向量的欧几里得距离 x1 lt rnorm 30 x2 lt rnorm 30 Use the dist 函数 但您需要根据第一个参数的两个输入形成一个矩阵dist dist rbind x1 x2 对于OP问题中的输入 我们得
  • eclipse远程调试超时问题

    当我尝试连接到本地计算机上的远程服务器 jboss 时 一切工作正常 但是如果我尝试连接到远程计算机 再次连接到jboss Eclipse 就会开始连接 并在一段时间后告诉我 Failed to connect to remote VM C
  • 空文件构造函数既不是文件也不是目录

    以下两种创建文件的方法有什么区别 new File System getProperty user dir new File Java 将第一个识别为目录 第二个识别为目录既不是文件也不是目录 为什么会这样 Code public clas