java 在eclipse工程下读取文件内容和打成war包后,读取同样文件内容,正确读取
关注:139 答案:3 mip版
解决时间 2021-01-16 22:44
提问者彼岸独舞
2021-01-16 17:43
请高手指点,非常感谢!
在eclipse工程下,读取文件内容代码,如下:
String []projectPath= Thread.currentThread().getContextClassLoader().getResource("").toString().split("file:/");
String []array = projectPath[1].split("/target");
filePath=array[0]+"/src/main/webapp/txt/a.txt";
List fileContentList= projectService.readFile(filePath);
public List readFile(String filePath){
List list=new ArrayList();
try
{
File f = new File(filePath);
if(f.isFile()&&f.exists())
{
InputStreamReader read = new InputStreamReader(new FileInputStream(f),"GBK");
BufferedReader reader=new BufferedReader(read);
String line;
while ((line = reader.readLine()) != null)
{
list.add(line);
}
read.close();
return list;
}
} catch (Exception e)
{
e.printStackTrace();
}
return null;
}
以上代码在eclipse工程下,能够正确读取到文件内容,但是打成war后,读取该内容为空。希望能够有一个通用的方法,在eclipse工程下和打成war包后的文件,都能正确的读取该文件。(使用相对路径)
最佳答案
二级知识专家守給你的承諾
2021-01-16 18:19
首先war打完之后你可以用解压软件看看里面的文件结构,和工程是不一样的。没有src/main/这一层。因此如果要满足你的使用相对路径要求,又要通用,只有两个方法。
1、在项目下重新建一个resource资源包,配置文件放在里面,然后根据resource相对路径读取
2、变更项目打包结构,打包输出时把src/main/这层加上
总之这两个方法的目的都是为了让war包结构和你工程一致。
我的读取配置文件方法如下,你可以参考下。文件路径:
String path = null;
try {
path = SellerProductController.class.getClassLoader()
.getResource("").toURI().getPath();
log.info("获取到配置文件的路径为:" + path);
} catch (URISyntaxException e) {
log.error("获取配置文件路径出现异常," + e.getMessage());
}
// 把文件读入文件输入流,存入内存中
FileInputStream fis = null;
try {
fis = new FileInputStream(new File(path + "isa_addr.json"));
} catch (FileNotFoundException e) {
log.error("读取配置文件出现异常," + e.getMessage());
}
// 设置response的字符集为项目指定字符集
response.setCharacterEncoding("UTF-8");
// 创建输出流对象
PrintWriter out = null;
try {
out = response.getWriter();
} catch (IOException e) {
log.error("创建输出流对象失败:" + e.getMessage());
}
String res = this.ReadFile(fis);
log.debug("最终获得的Json串为:" + res);
全部回答
1楼归人
2021-01-16 19:43
你这是通过绝对路径读的文件,打包后运行的环境有变化,最重要的是 /src/main 在打包后已经不存在了。
正确的做法可以是:当前这个class假设为A,A.class.getResourceAsStream("/txt/a.txt"),确保编译时 .txt 文件会复制到 classes 路径下(可以解压缩war以后看看是否在 WEB-INF/classes/txt/a.txt),如果不在,修改编译工具,除了将 .class 、.xml复制到class目录下,.txt也要复制。
2楼輓畱嶼赱
2021-01-16 19:10
右键需要导出的web工程——选择export
选择myeclipse jee——war file
选择导出的目标目录和运行环境,finish完成
我要举报
如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
→点此我要举报以上信息!←
推荐资讯
大家都在看