Springboot将项目打jar包后读取自定义文件问题:使用不同方法读取文件时获得的文件属于使用相对路径下还是绝对路径下的问题。
在IDEA上使用的是:
this.getClass().getClassLoader().getResource(“test.txt”).getPath();//获取到的是绝对路径
StringBuilder sb = new StringBuilder();
try {
File file = new File(this.getClass().getClassLoader().getResource("test.txt").getPath());
InputStream stream = new FileInputStream(file);
InputStreamReader in = new InputStreamReader(stream, "gbk");
try (BufferedReader reader = new BufferedReader(in)) {
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
}
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
在idea上运行获取是没问题,但是将项目打成jar或war包后会报错:
java.io.FileNotFoundException: file:\F:\xxx\xx\Demo-1.0-SNAPSHOT.jar!\BOOT-INF\classes!\test.txt (文件名、目录名或卷标语法不正确。)
这是由于该方法获取的路径是绝对路径,但是在打包后获取的是有问题的,所以需要获取相对路径的方法。在idea的resources目录下新建一个文件夹如test,然后将自定义的文件防止其中。然后使用
getClass().getClassLoader().getResourceAsStream(“相对路径+文件”)便可获取文件的流。
如下:
StringBuilder sb = new StringBuilder();
InputStream stream = getClass().getClassLoader().getResourceAsStream("test/test.txt");
InputStreamReader in = new InputStreamReader(stream, "gbk");
try (BufferedReader reader = new BufferedReader(in)) {
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
}