【问题标题】:Issues using getResource() with txt file (Java)使用带有 txt 文件 (Java) 的 getResource() 的问题
【发布时间】:2012-03-14 18:27:42
【问题描述】:

我有一个设置,我在我的程序中使用一个 txt 文件(读取和写入它)。目前我已经设置好了,所以我在我的机器上使用本地文件路径,但是我需要将它打包到一个可执行的 JAR 中。为此,我尝试将文件路径字符串切换为以下内容:

String filepath = MyClass.class.getResource("/resources/textfile.txt");

但是,当我运行它时,我得到了一堆错误。在谷歌搜索该方法后,我发现了类似的方法getResourceAsStream,我也尝试过。这似乎返回了一个 InputStream 对象,但是理想情况下我需要将文件路径作为字符串。这可能吗?如果不是,我有什么选择?

其他信息:

以下是我在尝试读取和写入 txt 文件时收到的错误消息:

java.io.FileNotFoundException:/Users/Fred/Documents/Eclipse%20Projects/RandomProject/bin/resources/textfile.txt (No such file or directory)

【问题讨论】:

  • 以后,请提供错误的详细信息,而不是仅仅说“我收到一堆错误”。请阅读tinyurl.com/so-hints

标签: java file-io resources


【解决方案1】:

您给出的代码不会编译,因为Class.getResource 返回的是URL,而不是String。您不能将资源视为“只是另一个文件”——因为它不是。

您应该基本上更改读取文件所需的任何内容以接受InputStream而不是文件名,然后传入调用getResourceAsStream()的结果。

【讨论】:

    【解决方案2】:

    该方法返回 URL,而不是 String。它的签名是public URL getResource(String name)

    你可能想这样做:

    String filepath = MyClass.class.getResource("/resources/textfile.txt").getPath();
    

    【讨论】:

    • 感谢您的评论,但是当我尝试使用文件路径时,它会抛出 java.io.FileNotFoundException,尽管事实上文件路径是 100% 正确并且我已经检查过了。发生这种情况有什么原因吗?
    【解决方案3】:

    我有一个设置,我在我的程序中使用一个 txt 文件(读取和写入它)。

    对于只读,资源可以在应用程序类路径上的 Jar 中。应用程序类路径上的资源是可写的(在生产中)是非常罕见的。此文本文件很可能需要放在可重现的路径中(例如,user.home 的子目录 - 其中子目录基于包名称)并用作该路径中的 File

    或者换一种说法。我认为你在追求错误的道路,以实现目标。

    【讨论】:

    • 好点:应该克隆 JAR 中的原始文件以在用户空间中生成工作副本。
    • @trashgod 是的,你说的 - “克隆以在用户空间中生成工作副本”。我试着想那些话,但他们躲开了我。 ;)
    【解决方案4】:

    如果您希望直接写入 JAR 中的文本文件,我的朋友,那么您完全错了!请发布更多代码,让我们了解您到底想要实现什么以及您认为可以如何实现。

    【讨论】:

      猜你喜欢
      • 2012-09-02
      • 2013-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-10
      • 2020-07-15
      • 2016-01-28
      • 1970-01-01
      相关资源
      最近更新 更多