Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将字符串从文本文件传递到JUnit代码中?_Java_Eclipse - Fatal编程技术网

Java 如何将字符串从文本文件传递到JUnit代码中?

Java 如何将字符串从文本文件传递到JUnit代码中?,java,eclipse,Java,Eclipse,我有以下文件,其中包含.MSG文件的二进制表示形式: binaryMessage.txt 我把它放在我的Eclipse工作区中,在下面的文件夹-src/main/resources/test: 我想在以下JUnit代码中使用此文本文件中的字符串,因此我尝试了以下方法: request.setContent("src/main/resources/test/binaryMessage"); mockMvc.perform(post(EmailController.PATH__ME

我有以下文件,其中包含
.MSG
文件的二进制表示形式:

binaryMessage.txt

我把它放在我的Eclipse工作区中,在下面的文件夹-
src/main/resources/test

我想在以下JUnit代码中使用此文本文件中的字符串,因此我尝试了以下方法:

    request.setContent("src/main/resources/test/binaryMessage");
    mockMvc.perform(post(EmailController.PATH__METADATA_EXTRACTION_OPERATION)
            .contentType(MediaType.APPLICATION_JSON)
            .content(json(request)))
            .andExpect(status().is2xxSuccessful());
}

但这不起作用。有没有一种方法可以不使用IO代码直接将字符串传递给文件

如果不使用IO代码(或使用IO代码的库),则无法读取文件。也就是说,将文件读入内存并不是那么困难,因此您可以发送它

要将二进制文件读入
字节[]
中,可以使用以下方法:

private byte[] readToByteArray(InputStream is) throws IOException {
    try {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len;
        while ((len = in.read(buffer)) != -1) {
           baos.write(buffer, 0, len);
        }
        return baos.toByteArray();
    } finally {
        if (is != null) {
            is.close();
        }
    }
}
那你就可以了

request.setContent(readToByteArray(getClass().getResourceAsStream("test/binaryMessage")));

如果不使用IO代码(或使用IO代码的库),则无法读取文件。也就是说,将文件读入内存并不是那么困难,因此您可以发送它

要将二进制文件读入
字节[]
中,可以使用以下方法:

private byte[] readToByteArray(InputStream is) throws IOException {
    try {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len;
        while ((len = in.read(buffer)) != -1) {
           baos.write(buffer, 0, len);
        }
        return baos.toByteArray();
    } finally {
        if (is != null) {
            is.close();
        }
    }
}
那你就可以了

request.setContent(readToByteArray(getClass().getResourceAsStream("test/binaryMessage")));

除了我对Samuel的回答的评论之外,我还注意到您依赖于具体的执行目录。我个人不喜欢这样,通常使用类装入器的函数来查找资源

因此,要独立于工作目录,可以使用

getClass().getResource("/test/binaryMessage")
将其转换为URI和路径,然后使用Files.readAllBytes获取内容:

Path resourcePath = Paths.get(getClass().getResource("/test/binaryMessage").toURI());
byte[] content = Files.readAllBytes(resourcePath);
。。。甚至可以将其转换为一个表达式


但是回到你最初的问题:不,这是I/O代码,你需要它。但是自从Java 7诞生(2011年!)以来,这就不需要再痛苦了。

除了我对Samuel的回答的评论之外,我刚刚注意到您依赖于具体的执行目录。我个人不喜欢这样,通常使用类装入器的函数来查找资源

因此,要独立于工作目录,可以使用

getClass().getResource("/test/binaryMessage")
将其转换为URI和路径,然后使用Files.readAllBytes获取内容:

Path resourcePath = Paths.get(getClass().getResource("/test/binaryMessage").toURI());
byte[] content = Files.readAllBytes(resourcePath);
。。。甚至可以将其转换为一个表达式

但是回到你最初的问题:不,这是I/O代码,你需要它。但是自从Java7诞生(2011年!)以来,这就不需要再痛苦了