【问题标题】:Java - How to format file URLsJava - 如何格式化文件 URL
【发布时间】:2018-04-02 12:38:51
【问题描述】:

我想知道如何制作相对文件URL,例如:

assets/images/icon.png

当我尝试将其作为文件 URL 输入时,它不起作用。

我想要做的是使用这是一个环境,例如:

new File("path/to/file")

我不提供代码的原因是因为我想知道如何做到这一点在几乎任何情况下

【问题讨论】:

  • 好消息! new File("path/to/file")正确的
  • 这仅在文件的 url 与您的程序源文件相关时才有效
  • @javafan 否。相对于您的程序启动的位置。
  • Google 术语“相对”和“绝对”文件路径以了解更多信息。本质上,absolute 指的是系统中的完整 URL。相对是指相对于基本运行时环境的 URL

标签: java


【解决方案1】:

首先,您的代码似乎正确,路径将是相对的。如果/ 是正确的分隔符,这可能取决于您的系统,您可能还需要// 而不是/,但这是另一回事。


简单且最新的答案:不要使用 File

Java 的新 I/O 库 (NIO) 能够为您完成所有这些工作,平台无关。它围绕PathPathsFiles 类展开。

您可以使用以下命令创建文件路径:

Paths.get("path", "to", "file");

它将动态为您当前的系统选择正确的分隔符

您使用Files 中的方法阅读它。例如一个列出该文件所有内容的演示:

Path theFile = Paths.get("path", "to", "file");
Files.lines(theFile).forEach(System.out::println);

如果您以后需要使用需要 File 对象的旧方法,您可以简单地使用 Path#toFile 方法 (documentation)。


请注意,相对路径将始终与您的程序开始的位置相关。您可以随时使用以下命令检查您当前所在的位置:

System.out.println(System.getProperty("user.dir"));

【讨论】:

  • File 并不像您建议的那样依赖于平台(因为它实际上并没有与真实的文件系统绑定),您也可以这样做 System.out.println(new File(System.getProperty("user.home"), "abc.txt").getCanonicalPath());
  • 我知道这一点,但你强调它是件好事,谢谢。
【解决方案2】:

我不确定您是否真的在询问 File 对象或 "file:" URL。它们是不同的东西。

如果您谈论的是File 对象,那么好消息是支持相对的File 对象,并且new File("path/to/file") 是有效的。 (其实不管是否解析都是有效的。)

如果您担心以适用于所有平台的方式创建 File 对象,您可以放心,File 可以理解带有正斜杠的路径名语法......即使在 Windows 机器上也是如此。

对于新代码,您可以选择使用具有更丰富 API 的 java.nio.file.Path。但是FilePath 都可以通过简单的名称以编程方式组装路径,因此您通常可以避免使用可疑的“字符串攻击”代码来构建路径,


如果您谈论的是"file:" URL/URI,那么坏消息是不允许使用相对的"file:" URL。具体来说,"file:" URI 方案的 W3C 规范要求 "file:" URL/URI 的路径具有根。例如:

 file:path/to/file

无效。更多详情:

现在您可以拥有一个相对 URI。但这只是一个“路径”,必须相对于其他 URL 进行解析。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    相关资源
    最近更新 更多