在Java中使用文件路径时,我们遇到了一些奇怪的问题。问题是,有时,在Windows中工作时,在路径中使用斜杠和反斜杠创建的文件的操作会失败。作为一项规则,我们正在用反斜杠替换斜杠,但我们无法确定为什么有时候操作失败而其他操作失败。
具体来说,操作是file.delete()。如果完全失败,它不会抛出任何类型的异常。
答案 0 :(得分:4)
您完全不应该使用File.delete()
;如果操作失败,它不会为您提供有意义的响应。
使用Files.delete(Path)
或Files.deleteIfExists(Path)
删除文件(由Path
表示,请参阅Paths.get(String…)
和File.toPath()
),因为这些方法会引发一个有意义的{ {1}}失败,而只有后者返回IOException
,表示成功或不存在但所有其他条件都标有异常。
Windows API中确实存在以静默方式处理斜杠作为分隔符的函数,但由于未指定哪些Java API方法将使用哪些本机函数,因此您不能依赖于此方面的任何特定行为。使用boolean
API时,您应始终使用File.separatorChar
或FileSystems.getDefault().getSeparator()
所示的分隔符。
答案 1 :(得分:0)
除非您使用反斜杠,否则Java会将它们视为转义码。例如,这就是换行符(\n
)和制表符(\t
)的工作方式。
来自JavaDoc on Characters and Escape Sequences:
以反斜杠(
\
)开头的字符是转义序列,对编译器具有特殊含义。
所以正在发生的事情是你的文件路径可能被视为转义序列。该链接有一些关于什么类型的转义码的详细信息。
所以如果你刚刚这样做了:
File.delete("c:\this.txt")
// Converted to "c: his.txt" (because of the tab)
如果可以的话,我建议加倍反斜杠(\\
)或转到所有正斜杠。
答案 2 :(得分:0)
File.delete
如果失败则不会抛出异常;相反,它返回一个布尔值,指示删除是否失败。来自Javadoc:
当且仅当文件或目录被成功删除时才返回
true
;false
否则
如果您在删除失败时想要例外,则需要自己提出:
if (!myfile.delete()) {
throw new IOException("Couldn't delete file " + myfile.getPath());
}