文章目录 方案一:使用ResourceUtils方案二:使用commons-io方案三:springboot获得本地磁盘文件路径方案四:通过ResourceLoader使用文件流的方式来读取J
这种方案是一个坑,详细内容参考:springboot读写磁盘json格式文件
使用这种方案一般都会提示:java.io.FileNotFoundException
<dependency> <groupId>commons-iogroupId> <artifactId>commons-ioartifactId> <version>2.11.0version>dependency>
File file = new File("E:/data/a.csv");FileUtils.readFileToString(file, "UTF-8");
解决方式一
使用如下代码获得工程发布后的jar包所在的路径,这种方式非常好用,测试环境和生产环境都正确
private String getJarFilePath() { ApplicationHome home = new ApplicationHome(getClass()); File jarFile = home.getSource(); return jarFile.getParentFile().toString();}
解决方式二
这种方式会存在问题,调试环境可以得到工程所在的磁盘路径,但是当使用java -jar E:\project.1.0.0.Jar
命令运行Jar包时不会得到正确的Jar包所在路径,会得到运行java命令时的路径
System.getProperty("user.dir")
解决方式三
获得classes目录绝对路径
String path = ResourceUtils.getURL("classpath:xxx").getPath();String path = ClassUtils.getDefaultClassLoader().getResource("xxx").getPath();
使用上面的方式,如果工程路径中存在中文,文件路径会有乱码,如下:
E:/%e5%ae%89%e6%a3%80%e8%81%94%e7%bd%91%e5%8d%87%e7%ba%a7%e6%94%b9%e9%80%a0/usb-key/target/classes/sysconfig.JSON
何为classpath
解决方式四
使用下面常规的方式,当打成Jar包后会出问题
File file = new File("src/main/resources/static/assets/test.txt");InputStream inputStream=new FileInputStream(file);
ResourceLoader读取的文件是流,于是进一步将流转换为文件方便操作
ResourceLoader resourceLoader = new DefaultResourceLoader(); InputStream inputStream = resourceLoader.getResource("static/img/loGo.png").getInputStream(); //通过将文件转换为临时文件进行操作 File file = File.createTempFile("logo", ".png"); try { FileUtils.copyInputStreamToFile(inputStream, file); } finally { //关闭IO IOUtils.closeQuietly(inputStream); }
如果想读取Jar包中的资源文件必须要采用文件流的方式
ClassPathResource classPathResource = new ClassPathResource("static/assets/test.txt");InputStream inputStream = classPathResource.getInputStream();
也可以参考文章:Java getResourceAsStream()获得Jar包中资源文件
小编没有写具体的实现,需要靠你自己完成,嘻嘻
如果不是特别的情况下,希望大家还是采用方案二结合方案三的解决方式一处理读写文件的问题(将一些文件放到和Jar同级的磁盘文件目录),不要轻易的操作Jar包了,毕竟人家Jar包已经打包好了。
来源地址:https://blog.csdn.net/baidu_38493460/article/details/128660849
--结束END--
本文标题: springboot对本地文件进行操作
本文链接: https://lsjlt.com/news/416489.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-04-01
2024-04-03
2024-04-03
2024-01-21
2024-01-21
2024-01-21
2024-01-21
2023-12-23
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0