路径上找不到文件“”src / test / resources /“

时间:2018-04-25 15:09:26

标签: java file unit-testing io

我的java测试代码尝试访问项目文件夹中的文件

但我得到IO异常:

   String fileContents = new String(Files.readAllBytes(
            Paths.get("src/test/resources/SenegalAndBulgariaConfig.txt")));


   String fileContents = new String(Files.readAllBytes(
            Paths.get("src/")));

它曾经有效,但现在不再有了:

java.nio.file.NoSuchFileException: src/test/resources/SenegalAndBulgariaConfig.txt

    at sun.nio.fs.UnixException.translateToIOException(UnixException.java:86)
    at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
    at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
    at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214)
    at java.nio.file.Files.newByteChannel(Files.java:361)
    at java.nio.file.Files.newByteChannel(Files.java:407)
    at java.nio.file.Files.readAllBytes(Files.java:3152)

虽然它存在:

enter image description here

5 个答案:

答案 0 :(得分:2)

你永远不应该依赖File。从类路径加载InputStream

如果使用Maven标准目录结构,src / main / resources和src / test / resources都在类路径中。

我倾向于喜欢Apache Commons IO库和Spring ClassPathResource

答案 1 :(得分:1)

假设SenegalAndBulgariaConfig.txt位于/resources

,以下情况应该有效
    InputStream is = getClass().getResourceAsStream("/SenegalAndBulgariaConfig.txt");
    StringWriter writer = new StringWriter();
    IOUtils.copy(is, writer, Charset.defaultCharset());
    String fileContents = writer.toString();
    System.out.println(fileContents );

注意 getClass()可以替换为ClassName.class

答案 2 :(得分:1)

private String readFileContent(String filePath) throws URISyntaxException, IOException {
    byte[] bytes = Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource(filePath).toURI()));
    return new String(bytes);
}

在您的情况下,filePath将是SenegalAndBulgariaConfig.txt。

例如:

String senegalAndBulgariaConfig = readFileContent("SenegalAndBulgariaConfig.txt");

答案 3 :(得分:0)

我认为你应该从fileContents String中删除“src”。

答案 4 :(得分:0)

在将文件作为资源(通过类路径)加载或直接在驱动器上进行寻址之间经常存在混淆。也许我的回答here可以帮助你解决这两个问题。