2

以前,当我在 fileWriter 中使用文件时它可以工作,但是现在,由于我使用的是 getResourceAsStream 而不是文件,我怎样才能使它工作?

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

现在,当我经过

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

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

编辑:

感谢 casablanca 和其他人指出我的错误,跟进:

我需要写入一个文件,但要附加到它,并保留原始内容。我当然需要知道我正在写哪个文件。

4

3 回答 3

3

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

getResourceAsStream返回一个InputStream你只能用于阅读的,这意味着你只能使用一个类,例如InputStreamReader.

更新:

您已经有了正确的代码来追加到文件,使用FileWriter. 但是,getResourceAsStream它返回一个只读资源,因此没有直接的方法可以将数据写回它。

于 2010-07-13T14:40:53.827 回答
3

InputStream表示输入流,因此不适合作为输出。您不能写入Inputstream. getResourceAsStream返回一个用于读取资源的流,而不是用于写入它。

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

于 2010-07-13T14:41:59.490 回答
0

如果您阅读文档,在这里,您会看到,您的 InputStream 没有构造函数。这就是为什么我不编译。既然你什么都没问,就这样吧。

于 2010-07-13T14:43:06.590 回答