当前位置: 首页 > 面试题库 >

Java-如何找出文件名是否有效?

文英达
2023-03-14
问题内容

在我的Java应用程序中,我将文件重命名为String参数中提供的文件名。有一种方法

boolean OKtoRename(String oldName, String newName)

它基本上检查newName是否尚未被其他文件占用,因为我不想掩埋现有文件。

现在我想到,也许newName String不会表示有效的文件名。所以我想将此检查添加到方法中:

if (new File(newName).isFile()) { 
    return false; 
}

这显然不是正确的方法,因为在大多数情况下newFile尚不存在,因此尽管它 OKtoRename,但该函数返回false。

我想知道是否有像这样的方法(我知道没有java.io.File对象)canExist()?还是我不得不求助于正则表达式以确保newFile字符串不包含无效字符(例如?,*,“,::])?我想知道JDK中是否隐藏了某个函数,该函数可以告诉我字符串是否可能表示有效的文件名。


问题答案:

使用createNewFile(),仅当文件尚不存在时,它会自动创建文件。

如果创建了文件,则该名称有效,并且不会破坏现有文件。然后,您可以打开文件,并通过FileChannel.transferXXX操作将数据从一个有效地复制到另一个。

要记住的重要一点是,通常,检查和创建应该是原子的。如果首先检查操作是否安全,然后作为一个单独的步骤执行操作,则此时的条件可能已更改,从而使操作不安全。

可以在以下相关文章中获得更多的思考:“Java中的移动/复制操作”。

更新:

从这个答案开始,就引入了NIO.2 API,它增加了与文件系统的更多交互。

假设您有一个交互式程序,并且想在每次按键后验证文件是否可能有效。例如,您可能只想在条目有效时才启用“保存”按钮,而不是在按“保存”后弹出错误对话框。创建并确保删除我上面的​​建议所需要的许多不必要的文件似乎是一团糟。

使用NIO.2,您无法创建Path包含文件系统非法字符的实例。InvalidPathException尝试创建时会引发An Path

但是,没有API可以验证由有效字符组成的非法名称,例如Windows上的“
PRN”。作为一种解决方法,实验表明,在尝试访问属性时(Files.getLastModifiedTime()例如,使用),使用非法文件名会引发明显的异常。

如果为确实存在的文件指定合法名称,则不会例外。

如果为不存在的文件指定合法名称,则会引发NoSuchFileException

如果指定非法名称,FileSystemException则会引发。

但是,这似乎很繁琐,在其他操作系统上可能并不可靠。



 类似资料:
  • 问题内容: 作为测试的一部分,该系统应该确定用于打开网站的设备是移动设备还是普通台式机。 我不断收到错误: “ InvalidSelectorError:无法使用xpath表达式// * [包含(@class,is-mobile … 萤火虫的属性: 我的测试: 有人可以告诉我正确的XPath应该是什么吗? 问题答案: 您似乎缺少右括号和右括号: 更改此: 变成这个: 附带说明一下,请考虑到此代码还

  • 问题内容: 不同的操作系统具有不同的文件名最大长度。使用文件时,Java对文件名长度有任何限制吗? 问题答案: Java没有最大文件名长度,除了字符串最大长度限制(即数组最大长度,即Integer.MAX_VALUE)外。也许某些JVM有一个较低的限制,但是我从来没有遇到过这样的问题(而且我几乎可以肯定,就Java规范而言,这将是一个错误),当然,操作系统可以有一个。

  • 问题内容: 我的webapp允许用户上传jar文件。但是,将jar文件上传后,它已损坏。我已经通过比较md5校验和(winmd5free)对此进行了验证。 上传的jar文件看起来“正常”和“正确” 与原始文件相比,文件大小看起来不错(在KB级别) 我可以使用7z打开上载的jar文件并查看其内容(资源和类文件),并且与原始文件相比,一切都相同 当我打开上载的jar文件(使用Notepad ++)时,

  • 我有一本书。conf文件,我想找到一个以字符串开头的文本块,该字符串是动态的,因为它是从另一个文件加载的。块的结尾将基于一个始终以字符串“endblock”开头的字符串。街上的街区。conf文件如下所示,最后有一个示例需要澄清。 我可以用以下代码加载文本: 例如: 我想知道下面的文本块是否存在于名为example.conf的文件中,如果条件是True,我不想把它写在文件中。否则,我想添加文本块。如

  • 问题内容: 我正在为一个学校项目工作,并且正在实现一个可用于从网络下载文件的工具(带有限制选项)。问题是,我将为其提供图形用户界面,并且我将使用小部件,该小部件将显示下载的当前进度。为此,我需要知道文件的大小。在下载文件之前,如何获取文件的大小。 问题答案: 任何HTTP响应都 应该 包含Content-Length标头,因此您可以查询URLConnection对象以获取此值。 服务器不一定总是能

  • 问题内容: 我为服务器制作了一个简单的报价机器人,但管理员只希望mod +人员能够添加报价以避免垃圾邮件。我去了文档并做了所有工作,但是我无法使它正常工作。这是我所拥有的: 非常挑剔。有时,如果用户具有mod角色,它通常会起作用。如果我做 两者都将输出为false,但是会起作用吗?老实说,目前我还不知道。 问题答案: discord.js api已更新,并且自弃用以来有一种更好的方法。 这好于因为