从同一目录中的文件读取
Reading From a File Within Same Directory
我正在使用 Groovy Spock 框架、IntelliJ 和 Bazel 构建系统编写测试。目标是从与测试文件 Model3dImporterSpec.groovy
.
位于同一目录的 LamborghiniAventador.obj
读取测试数据
我收到 java.io.FileNotFoundException
.
def "reading from test file in same directory"() {
given: "some stuff"
//do some stuff here
when: "reading from test file"
def file = Paths.get("LamborghiniAventador.obj").normalize().toFile()
def byteArray = getFileAsByteStream(file.getAbsolutePath())
then: "file should be read and byte array should not be null"
byteArray != null;
}
private static byte[] getFileAsByteStream(String pathToFile) {
return new File(pathToFile).text.getBytes()
}
我在命令行搜索时的文件路径是:~/Dev/Master/src/test/java/com/censored/api/editor/model3dparsers/LamborghiniAventador.obj
我可以成功读取桌面上的文件,但是一旦我在项目中重新定位该文件 space,事情就停止了。
如何从测试文件中读取测试数据,其中测试数据文件和测试文件位于同一目录中。这在 Java (Eclipse) 中是一项简单的任务。我已经查看了大量其他 Whosebug 问题,但无济于事,所以我认为我在这里严重缺乏理解。除了答案之外,我还喜欢解释。
编辑澄清
假设规范 Model3dImporterSpec.groovy
位于:
src/test/groovy/org/whatever
LamborghiniAventador.obj
文件应位于:
src/test/resources/org/whatever
为什么?资源文件应与源文件保存在同一目录下。
然后加载文件使用:
getClass().classLoader.getResourceAsStream('LamborghiniAventador.obj')
我在@Opal 的帮助下解决了我自己的问题。
1) 当您想访问 bazel 中的资源时,您需要通过添加资源数组来更新构建文件:
resources = ["LamborghiniAventador.obj"],
2) 根据@Opal 的建议,def foo = getClass().getResourceAsStream('LamborghiniAventador.obj')
在我进行更改 1) 后对我有用。所以上面的代码现在是:
def "reading a file in goovy."() {
when: "reading file from same directory"
System.out.println("Going to read from a file in same directory")
def foo = getClass().getResourceAsStream('LamborghiniAventador.obj')
def byteArray = foo.getBytes()
then: "file should be read and byte array should not be null"
byteArray != null;
}
我正在使用 Groovy Spock 框架、IntelliJ 和 Bazel 构建系统编写测试。目标是从与测试文件 Model3dImporterSpec.groovy
.
LamborghiniAventador.obj
读取测试数据
我收到 java.io.FileNotFoundException
.
def "reading from test file in same directory"() {
given: "some stuff"
//do some stuff here
when: "reading from test file"
def file = Paths.get("LamborghiniAventador.obj").normalize().toFile()
def byteArray = getFileAsByteStream(file.getAbsolutePath())
then: "file should be read and byte array should not be null"
byteArray != null;
}
private static byte[] getFileAsByteStream(String pathToFile) {
return new File(pathToFile).text.getBytes()
}
我在命令行搜索时的文件路径是:~/Dev/Master/src/test/java/com/censored/api/editor/model3dparsers/LamborghiniAventador.obj
我可以成功读取桌面上的文件,但是一旦我在项目中重新定位该文件 space,事情就停止了。
如何从测试文件中读取测试数据,其中测试数据文件和测试文件位于同一目录中。这在 Java (Eclipse) 中是一项简单的任务。我已经查看了大量其他 Whosebug 问题,但无济于事,所以我认为我在这里严重缺乏理解。除了答案之外,我还喜欢解释。
编辑澄清
假设规范 Model3dImporterSpec.groovy
位于:
src/test/groovy/org/whatever
LamborghiniAventador.obj
文件应位于:
src/test/resources/org/whatever
为什么?资源文件应与源文件保存在同一目录下。
然后加载文件使用:
getClass().classLoader.getResourceAsStream('LamborghiniAventador.obj')
我在@Opal 的帮助下解决了我自己的问题。
1) 当您想访问 bazel 中的资源时,您需要通过添加资源数组来更新构建文件:
resources = ["LamborghiniAventador.obj"],
2) 根据@Opal 的建议,def foo = getClass().getResourceAsStream('LamborghiniAventador.obj')
在我进行更改 1) 后对我有用。所以上面的代码现在是:
def "reading a file in goovy."() {
when: "reading file from same directory"
System.out.println("Going to read from a file in same directory")
def foo = getClass().getResourceAsStream('LamborghiniAventador.obj')
def byteArray = foo.getBytes()
then: "file should be read and byte array should not be null"
byteArray != null;
}