【问题标题】:Pass a local file in to URL in Java将本地文件传递到 Java 中的 URL
【发布时间】:2011-08-31 04:56:55
【问题描述】:

如何使用本地文件创建一个新的URL 对象以进行单元测试?

【问题讨论】:

    标签: java url junit


    【解决方案1】:

    使用 Java 11:

    Path.of(string).toUri();
    

    使用 Java 7:

    Paths.get(string).toUri();
    

    要转换为老式 URL 类(为什么?),请添加 .toURL()。请注意,字符串输出存在差异。现代的URI::toStringfile:///(传统的URL 语法)开头,而几乎被弃用的URL::toStringfile:/(现代的URI 语法)开头。奇怪?

    【讨论】:

    • "...URI 以 file:/// 开头,但 URL 以 file:/ ..." Windows 和 Linux 都是这种情况吗?
    • @ptntialunrlsd 这是个好问题。我还没有检查,但我猜是的。
    • 没有。 URL 只是 URI 的一种特殊情况。文件 URI 以“file://”开头,然后列出主机(通常省略),然后是“/”和路径“foo/bar”(通常意味着作为绝对路径读取)。因此“file:///foo/var”。看起来像“file:/foo/bar”的 URI 不正确。另见:file URI scheme
    • @DavidTonhofer 感谢您对 URI 的解释,但这并不能回答 ptntialunrlsd 的问题。 '...toURL().toString()' 在 Linux 上产生什么?另外,我已恢复您的编辑,因为它们使我的回答更加冗长而没有改变含义。
    • @AleksandrDubinsky 不过,最好将指向 Oracle javadoc 的指针留在其中.. 更容易点击进入 java.nio.file.Paths。另外,请务必明确您的意思是“URI vs URL”中的实现。 Anway java.net.URL.toString() 在 Unix 上产生同样的东西,因为它必须。它只显示一个非常错误的“/”(参见file URI scheme)。我想这是在 Java 中的原因,最好使用java.net.URI。它在调用.toString() 时正确生成“file://[host]/”。
    【解决方案2】:

    我在 Linux 上使用 Java 进行了尝试。下列可能性是可以的:

    file:///home/userId/aaaa.html
    file:/home/userId/aaaa.html
    file:aaaa.html  (if current directory is /home/userId)
    

    不工作是:

    file://aaaa.html
    

    【讨论】:

      【解决方案3】:

      你也可以使用

      [AnyClass].class.getResource(filePath)
      

      【讨论】:

      • 但前提是该文件存在于类路径中
      • 如果可以在 jar 中找到“filePath”,则生成的 URL 类似于 jar:file:/home/user/a/b/c/foo.jar!/com/example/stuff/config.txt
      【解决方案4】:
      new File(path).toURI().toURL();
      

      【讨论】:

      • 对于 java 7+:Paths.get("path","to","stuff").toUri().toURL()
      【解决方案5】:
      File myFile=new File("/tmp/myfile");
      URL myUrl = myFile.toURI().toURL();
      

      【讨论】:

        【解决方案6】:

        在这里查看完整的语法:http://en.wikipedia.org/wiki/File_URI_scheme 对于类 unix 的系统,它将是 @Alex 所说的 file:///your/file/here,而对于 Windows 系统,它将是 file:///c|/path/to/file

        【讨论】:

        • 不要手动操作。 File.toURI().toURL()是要走的路
        • @SeanPatrickFloyd 有时您别无选择,例如在 .properties 文件中时。
        • @ArtB 我不明白这有什么不同
        • @SeanPatrickFloyd,当您搜索 java file url 时会出现此问题/答案,在我的情况下,这意味着我正在搜索 file:// URL 的格式,用 Java 编写,用于.properties 文件,或手动输入等。
        • @SeanPatrickFloyd 有时您无权访问源代码,只能访问属性,很遗憾,file:// 是必要的。依赖于系统并不是一个大问题,因为它是一个可变属性。
        【解决方案7】:
        new File("path_to_file").toURI().toURL();
        

        【讨论】:

          【解决方案8】:
          new URL("file:///your/file/here")
          

          【讨论】:

          • 其中/your/file/here 是 Unix/Linux 上文件的绝对路径。我认为在 Windows 上会有所不同。
          • 这不是很聪明,因为您必须自己处理 URL 中不允许的字符的转义。在 Windows(以及可能的其他操作系统)上,您还必须将路径分隔符从文件的本机路径修改为。
          • new URL("file:my.properties");
          • 虽然这是正确的,但它是不可移植的,因为它依赖于绝对路径。
          • 在 Windows 上,以下对我有用:file:///C:\\file.zip
          猜你喜欢
          • 2011-07-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-02
          • 1970-01-01
          • 2012-03-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多