【问题标题】:Copy files in java eclipse?在java eclipse中复制文件?
【发布时间】:2014-10-04 17:39:20
【问题描述】:

我将一个文件放在名为“templates”的文件夹中,该文件夹位于我的 Eclipse 项目的 src/ 中。我正在尝试制作该文件的副本,并希望对其进行编辑。这是我的代码:

InputStream source = getClass().getClassLoader().getResourceAsStream("templates/file.docx");
File dest = new File("templates/updatedfile.docx");

try{
    Files.copy(source, dest.toPath());
}
catch(Exception e)
{
    e.printStackTrace();
}

但是,我得到一个 java.nio.file.NoSuchFileException: template/updatedfile.docx!我做错了什么?

编辑:抱歉,修正了代码中的一个错字,现在更新了确切的异常

【问题讨论】:

  • 似乎此文件 templates/file.docx 未被识别为您的应用程序中的资源。确保此文件在您的源代码中。否则,我建议改用具体路径。
  • @BackSlash 这是NullPointerException 的一般问答。这种情况是一个相当具体的问题,IMO API 应该抛出一个IOException,因为在getClass().getClassLoader().getResourceAsStream 找不到文件。
  • 您究竟从哪里得到异常?
  • @jny 按照答案中的建议进行更改后,异常返回 nullpointerexception!

标签: java eclipse path relative-path


【解决方案1】:

你可以使用:

System.out.println(System.getProperty("user.dir"));

查看java默认查看的根文件夹在哪里,这可能是您的“项目文件夹”。 /src 文件夹位于项目文件夹下,因此您可能也必须将其添加到路径中:

"src/templates/updatedfile.docx"

【讨论】:

  • user.dir 返回 /Users/username/eclipse/Eclipse.app/Contents/MacOS/ 并在进行建议的更改后,它又回到了 nullpointerexception。
  • 而您的src 文件夹在user.dir 返回的内容下?
  • 不,它在我的文档文件夹中!!
  • 没错。当您放置/templates/updatedfile.docxsrc/templates/updatedfile.docx 之类的路径时,java 会假设它存在于user.dir 返回的文件夹下。如果没有,请移动文件或输入绝对路径,如C:\Documents\..\...\..
  • 我明白,但我希望这个应用程序是可移植的。我能做什么?
【解决方案2】:

当您在 Eclipse 中运行应用程序时,它会在您的项目文件夹中运行。因此,当您创建一个新文件templates/updatedfile.docx 时,您正在尝试同时创建一个新目录和文件。 尝试在您的项目文件夹中创建 templates 目录并再次运行该应用程序。 或者,在您的代码中,您可以检查目录是否存在,如果不存在则创建它。

【讨论】:

  • 对不起,如果我不清楚,我已经有了 templates/ 目录 - 只需将文件复制到那里!
  • 嗯,它不应该在您的src 目录中。只需在项目根目录中创建模板目录并将源文件放在那里。您需要更改源文件路径的代码。
  • 但是如果你想保持现在的样子,你需要将dest文件的路径更改为bin/templates/...。这就是您的应用从中读取源文件的位置。
  • 我尝试将所有内容都保存在根文件夹中以使用相对路径进行输入(templates/file.docx)和输出(templates/updatedfile.docx),但没有成功!
  • 我得到一个 java.nio.file.nosuchfileexception 模板/file.docx
猜你喜欢
  • 1970-01-01
  • 2020-02-03
  • 2011-08-02
  • 2012-06-17
  • 2012-10-23
  • 1970-01-01
  • 2013-01-25
  • 1970-01-01
  • 2022-07-23
相关资源
最近更新 更多