1 배경 소개
연구 개발 과정에서 구성 파일을 읽는 등의 반복적인 단계를 수반하는 경우가 많으며, .conf 파일일 수도 있고 .json 파일일 수도 있지만 어쨌든 결국에는 jave의 inputStream에 들어가야 합니다. .json 파일을 예로 들어 보겠습니다.
2 FileInputStream 읽기
하나의 매개변수가 필요합니다.
fileName: 파일 이름, 일반적으로 절대 경로입니다. 그렇지 않으면 찾을 수 없습니다. 또는 java 파일과 동일한 경로에
static String readWithFileInputStream(){
String jsonString;
//System.getProperty("user.dir")为获取根目录
//File.separator为不同操作系统的分隔符,linux和win是不一样的
//tempFilePath该字符串里面为我们配置文件的路径
String fileName = "xx_config.json";
// String tempFilePath = System.getProperty("user.dir") + File.separator + "resource" + File.separator + fileName;
// System.out.print(tempFilePath);
StringBuilder sb = new StringBuilder();
try{
InputStream input = new FileInputStream(fileName);
byte[] buffer = new byte[1024];
int length = 0;
length = input.read(buffer);
while(length != -1){
sb.append(new String(buffer, 0 , length));
length = input.read(buffer);
}
}catch (Exception e){
e.printStackTrace();
}
return jsonString = sb.toString();
}
마지막으로 문자열을 반환합니다. 그런 다음 JSON 도구를 통해 읽고 싶은 모델로 변환할 수 있습니다.
TargetConfig config = (TargetConfig) JSON.parseObject(jsonString, TargetConfig.class);
그러나 이 방법은 유연하지 않으며 경로를 하드코딩하거나 절대 경로로 작성해야 합니다.
3 ClassLoader 읽기
두 개의 매개변수가 필요합니다.
fileName: 파일 이름
ClassLoader: 클래스 로더, 일반적으로 현재 클래스
static String readWithClassLoader() throws IOException {
String fileName = "xx_config.json";
ClassLoader classLoader = TargetConfig.class.getClassLoader();
BufferedReader reader = null;
InputStream inputStream = classLoader.getResourceAsStream(fileName);
reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder content = new StringBuilder();
String line = reader.readLine();
while (!StringUtil.isEmpty(line)) {
content.append(line);
line = reader.readLine();
}
return content.toString();
}
和之前一样,最终返回一个String。然后通过JSON工具就可以转为自己想读取到模型啦。
TargetConfig config = (TargetConfig) JSON.parseObject(jsonString, TargetConfig.class);
그러나 읽기 위해 클래스 로딩을 사용하면 경로를 하드코딩할 필요가 없습니다. 첫 번째 것보다 훨씬 유연합니다.