【问题标题】:How to check if a file can be successfully created in Java 8如何检查是否可以在 Java 8 中成功创建文件
【发布时间】:2018-03-19 04:35:08
【问题描述】:

我正在寻找一种方法来判断是否可以成功创建由文件路径表示的文件。我正在测试的场景是文件路径太长——300 个字符,在 Windows 7 上。我尝试过的:

Files.get(filePath)

这不会抛出。

file.getCanonicalFile()

这也不扔。

!Files.exists(filePath) && !Files.notExists(filePath)

exists 返回 false,notExists 返回 true。

!file.canWrite()

canWrite 返回 true。

file.createNewFile()

这不会抛出。 “ls”表示该文件存在,但在 Windows 资源管理器中导航到包含目录时会显示整个文件夹为空。我必须使用命令行删除坏文件才能显示文件夹内容。这种情况正是我想首先验证文件路径的原因。

有什么建议吗?

【问题讨论】:

  • 您自己承认文件是实际创建的,因此 API 没有理由抛出异常。 ls 不是 Windows 命令,您是指 NFS 共享上的文件还是使用 Cygwin?目前尚不清楚您的意思。您可能创建了一个文件系统可以处理但 Windows 资源管理器看不到的文件,但如果没有更多细节,我们无法判断发生了什么。此外,有时 Windows 资源管理器需要启动(即 F5 刷新)才能显示通过程序创建的文件。
  • 我应该更好地措辞这个问题。我想确保文件路径与操作系统可以正确处理的路径相对应。这包括 Windows 资源管理器在创建时未决定不显示包含该文件的文件夹中的任何文件。根据每个操作系统的已知限制验证文件路径和文件名长度是我唯一的选择吗?编辑:ls 也来自 cygwin。
  • 我认为类似的问题已经存在:stackoverflow.com/questions/468789/…
  • 当您使用非标准(如非 MS)工具时,在帖子中明确说明这一点非常重要。我使用并喜欢 Cygwin,但它可以显示 Explorer 和 CMD 看不到的东西。您是否检查了隐藏/系统属性?我知道文件系统可以存储名称无法在 Windows 标准工具中创建的文件。
  • 没有一个链接的答案可以验证我测试的情况,即创建时会破坏 Windows 资源管理器的文件路径。至少,在 Windows 7 上运行 Java 8(如果它恰好与操作系统或 Java 版本相关)。

标签: java validation filepath


【解决方案1】:

如果 API 返回 SUCCESS,则文件已创建。

Windows 资源管理器是否可以列出文件是一个完全不同的问题,并且存在可以创建文件但在资源管理器或 CMD 窗口中不可见的已知边缘情况。目前我没有任何方便的示例,但当我找到它们时会添加一些。

【讨论】:

  • 有道理,谢谢。接下来的问题是,如何验证创建文件不会阻止在 Windows 资源管理器中查看包含文件夹?
  • 我 99% 确定答案是您无法通过 API 知道。可能唯一知道的方法是在 Explorer 中实际尝试。
猜你喜欢
  • 1970-01-01
  • 2010-09-23
  • 2018-07-19
  • 1970-01-01
  • 1970-01-01
  • 2019-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多