大家好,欢迎来到IT知识分享网。
【地震高岗,一派西山千古秀】
背景
文件上传请求时,一般我们传入文件路径作为参数,使用常用路径获取方法都可以,如:this.getClass().getClassLoader().getResource(“filename”).getPath()获取项目中文件路径;但是Java项目部署时需要打成jar包,运行后就会出现错误:路径异常;那么是什么原因导致的错误?我们该如何获取jar中文件路径呢?
原因
- 当我们项目打包部署jar后,那么jar包是一个特殊格式的文件形式存在,就只能使用IO的方式读取资源,因此这时候就不能通过一般的File来操作资源了。
- 在本地IDE项目中之所以能正常运行,是因为编辑器中的资源文件在target/classes目录下,是正常的文件系统结构,我们可以逐层获取资源的路径的。
解决
方法1:创建临时文件,使用IO读取文件内容并输出到临时文件中,这样我们就能获取临时文件路径代替项目中文件路径,当然这样比较消耗资源;
方法2:上传时ftp中我们可使用以下方式,亲测可用哦 FtpClient ftp = new FtpClient ();
ftp.setDataTimeOut(10*1000);
ftp.connect(ip);
ftp.login(name,pwd);
ftp.setFileType(DTP.BINARY_FILE_TYPE);
ftp.setControlEncoding(“GBK”);
ftp.enterLocalPassiveMode();
String dir = ftp.printWorkingDirectory();
String filePath = “/config/test.sh”; //注意一点,config前面的‘/’不能省略
String uploadPath = dir + filePath ;
InputStream istream= this.getClass().getResourceAsStream(filePath );
ftp.storeFile(uploadPath ,istream);
思考
其实我们在尝试解决问题的时候还可以考虑一下是不是这个问题本身就是个伪命题;换个角度,为什么我们会把使用到的文件打包在jar中呢,是不是一定要在jar中才行?这种场景是不是使用文件服务器更方便更高效呢?如果我们想通了是不是自然而然就可以避免这个问题的出现呢?好了,朋友们。。。不扯了,晚安!
【门朝大海,三河合水万年流】
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/51468.html