代码之家  ›  专栏  ›  技术社区  ›  Gandalf StormCrow

Java中的文件写入器和输入流

  •  2
  • Gandalf StormCrow  · 技术社区  · 16 年前

    以前,当我在文件编写器中使用文件时,它起作用了,但是现在,由于我使用的是getresourceasstream而不是file,我如何使它起作用呢?

    FileWriter fstream = new FileWriter(new File("filename"), true);
    

    现在,当我通过的时候

    InputStream is = getResourceAsStream("filename");
    FileWriter fstream = new FileWriter(is, true);
    

    我必须更改它,因为当我用Maven程序集插件创建一个可运行的jar时,jar中没有src/main/resources

    编辑:

    感谢卡萨布兰卡和其他人指出了我的错误,请跟进:

    我需要写一个文件,但要附加到文件中,并保留原始内容。当然,我需要知道我在写什么文件。

    3 回复  |  直到 12 年前
        1
  •  3
  •   tonio    16 年前

    InputStream 表示输入流,因此它不适合作为输出。你不能写信给 Inputstream . getResourceAsStream 返回流 阅读 一种资源,不是用来写的。

    我很抱歉,没有简单的方法可以写入通过 ClassLoader . 一种解决办法是将其解读为 Properties ,然后使用 store 方法将其写入资源文件,通过其他方法获取输出流。您可以使用类加载器获取资源文件的URI,但不能保证您可以直接写入它(例如,如果它捆绑在签名的JAR中)。

        2
  •  3
  •   casablanca    16 年前

    首先,要写入流,需要一个通用的流编写器,而不是文件编写器。其次,写意味着输出,所以您需要一个输出编写器。所以你要找的班级是 OutputStreamWriter .

    getResourceAsStream 返回一个 InputStream 你只能用来 阅读 ,这意味着您只能使用 InputStreamReader .

    更新:

    您已经有了用于附加到文件的正确代码,使用 FileWriter . 然而, 获取资源流 返回只读资源,因此没有直接的方法将数据写回该资源。

        3
  •  0
  •   InsertNickHere    16 年前

    如果你读了文件, here 您将看到,您的inputstream没有构造函数。这就是我不编译的原因。既然你什么都没问,就这样。

    推荐文章