我的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)
虽然它存在:
答案 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可以帮助你解决这两个问题。