【问题标题】:A file in my resources folder isn't getting written with try-with-resources and BufferedWriter, why?我的资源文件夹中的文件没有使用 try-with-resources 和 BufferedWriter 写入,为什么?
【发布时间】:2021-01-05 12:42:23
【问题描述】:

我的项目的资源文件夹中有一个文件test.txt,我正在尝试向其中写入一个字符串列表,每行一个(来自测试类,如果重要的话)。
出于某种原因,尽管没有抛出或捕获异常,但我已经尝试了很多东西,但我无法写入它。例如:

Path p = Paths.get(ClassLoader.getSystemResource("test.txt").toURI());

try (BufferedWriter writer = Files.newBufferedWriter(p)) 
{
    for (String line : lines) writer.write(line);
} 
            
catch (IOException e) 
{
    e.printStackTrace();
}

Files.write(p, lines) 也不起作用。我很困惑,因为没有报告错误,但文件仍然是空的。我还确保使用p.toFile().exists() 识别路径,并且它确实返回true。我错过了什么?

【问题讨论】:

  • 您应该将您从类加载器获得的资源视为只读的:它们并不是要写入的,并且取决于您的构建系统您执行写入的任何内容它们可以很容易地被覆盖(自动或在下一次构建期间)。

标签: java eclipse file bufferedwriter


【解决方案1】:

我假设你是从你的 IDE 运行这个?

IDE 将构建项目并复制资源以及已编译的.class 文件到输出目录。 修改任何这些资源时,复制的资源文件将被覆盖,但不会覆盖源资源文件 - 我假设您现在正在查看这些资源,并且它们看起来仍然相同。 此外,每次构建项目时,复制的资源文件可能会被覆盖。

提示:输出(打印)路径以检查您实际修改的是哪个文件。

【讨论】:

    【解决方案2】:

    如果您使用 maven,src/main/resources 中的文件将被复制到输出文件夹 target/classes/test.txt。打印您的文件路径并查看您正在使用的实际路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-08
      • 1970-01-01
      • 2013-09-12
      • 1970-01-01
      • 2020-05-27
      相关资源
      最近更新 更多