问题:本地调试读取文件和机器部署后读取文件,读取路径存在差异,从而导致读取文件失败
1、本地调试
本地调试代码如下
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class ReadVmFileToObjectNode {
public static void main(String[] args) {
ObjectMapper objectMapper = new ObjectMapper();
ObjectNode objectNode = objectMapper.createObjectNode();
try (BufferedReader reader = new BufferedReader(new FileReader("template.vm"))) {
String line;
StringBuilder content = new StringBuilder();
while ((line = reader.readLine()) != null) {
content.append(line).append("\n");
}
objectNode.put("content", content.toString());
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(objectNode);
}
}
这个本地调试可以直接读取出来,但部署到机器上后,报错:找不到文件
找寻问题:不同环境下的读取文件的路径是不同的,取决于相关环境的配置
2、机器部署
修复方式,修改读取文件写法,通过流方式读取
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
public class JsonStringToObjectNode {
public static void main(String[] args) {
try {
String jsonString = StreamUtils.copyToString(
YourClassName.class.getClassLoader().getResourceAsStream("classpath:/template.vm"),
StandardCharsets.UTF_8
);
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(jsonString);
if (jsonNode instanceof ObjectNode) {
ObjectNode objectNode = (ObjectNode) jsonNode;
// 现在你可以使用 objectNode 对象进行操作
System.out.println("转换为 ObjectNode 成功:" + objectNode);
} else {
System.out.println("JSON 不是一个对象");
}
} catch (IOException e) {
// 处理异常
e.printStackTrace();
}
}
}