java - 在 Java/Springboot 中创建文件时权限被拒绝错误 - Tomcat
问题描述
我正在尝试在 Java/SpringBoot 中创建一个文件并使用 FileWriter 方法写入它。下面是我的代码。
String filename = file.csv;
LOGGER.info("Creating File CSV");
File file = new File(filename);
Boolean Isexists =file.exists();
boolean isexistsabs = file.getAbsoluteFile().exists();
LOGGER.info("CSV File Exists? : "+Isexists);
LOGGER.info("CSV File ABSExists? : "+isexistsabs);
boolean setwritable = file.setWritable(true);
LOGGER.info("SetWritable CSV Output : "+Boolean.toString(setwritable));
boolean setExecutable = file.setExecutable(true);
LOGGER.info("SetExecutable CSV Output : "+Boolean.toString(setExecutable));
LOGGER.info("before file Writer CSV");
FileWriter filewriter = new FileWriter(filename);
LOGGER.info("after file Writer CSV");
LOGGER.info("Writing File CSV");
String content ="Some CSV Content";
filewriter.write(content);
LOGGER.info("Written to File CSV");
filewriter.close();
LOGGER.info("Closing File CSV");
当我在本地系统中执行代码时,它正在工作,下面是代码的日志
2020-07-28 00:56:17.204 INFO 15956 --- Controller : Creating File CSV
2020-07-28 00:56:17.205 INFO 15956 --- Controller : CSV File Exists? : true
2020-07-28 00:56:17.206 INFO 15956 --- Controller : CSV File ABSExists? : true
2020-07-28 00:56:17.206 INFO 15956 --- Controller : SetWritable CSV Output : true
2020-07-28 00:56:17.207 INFO 15956 --- Controller : SetExecutable CSV Output : true
2020-07-28 00:56:17.207 INFO 15956 --- Controller : before file Writer CSV
2020-07-28 00:56:17.208 INFO 15956 --- Controller : after file Writer CSV
2020-07-28 00:56:17.209 INFO 15956 --- Controller : Writing File CSV
2020-07-28 00:56:17.209 INFO 15956 --- Controller : Written to File CSV
2020-07-28 00:56:17.210 INFO 15956 --- Controller : Closing File CSV
但是,当我在部署到下面的 tomcat 服务器后执行相同操作时,我收到的日志/错误是
2020-07-27 14:34:15.465 INFO 17902 --- Controller : Creating File CSV
2020-07-27 14:34:15.465 INFO 17902 --- Controller : CSV File Exists? : false
2020-07-27 14:34:15.465 INFO 17902 --- Controller : CSV File ABSExists? : false
2020-07-27 14:34:15.466 INFO 17902 --- Controller : SetWritable CSV Output : false
2020-07-27 14:34:15.466 INFO 17902 --- Controller : SetExecutable CSV Output : false
2020-07-27 14:34:15.466 INFO 17902 --- Controller : before file Writer CSV
2020-07-27 14:34:15.488 ERROR 17902 --- [http-nio-8080-exec-31] o.s.b.w.servlet.support.ErrorPageFilter : Forwarding to error page from request [/api/getFlighPlanCSV] due to exception [file.csv (Permission denied)]
java.io.FileNotFoundException: file.csv (Permission denied)
at java.base/java.io.FileOutputStream.open0(Native Method) ~[na:na]
at java.base/java.io.FileOutputStream.open(FileOutputStream.java:291) ~[na:na]
at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:234) ~[na:na]
at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:123) ~[na:na]
at java.base/java.io.FileWriter.<init>(FileWriter.java:66) ~[na:na]
at com.aiknights.com.rapidviewmain.controller.SiteInspectionController.DownloadFlightPlan(SiteInspectionController.java:175) ~[classes/:0.0.1-SNAPSHOT]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) ~[spring-web-5.2.1.RELEASE.jar:5.2.1.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.2.1.RELEASE.jar:5.2.1.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.2.1.RELEASE.jar:5.2.1.RELEASE]
写入文件时似乎出错,说找不到文件,似乎 application/.war 由于权限问题而无法在 PWD 中创建文件。
My application name - applicationmain.war
resides at - /opt/tomcat/webapps/applicationmain.war
there is also a folder created whenever I deploy the war file - /opt/tomcat/webapps/applicationmain
I tried assiging all permissions to both the war file itself and the folder that is created when deploying the war file with no luck
我将回答任何询问有关设置和代码的更多详细信息的评论。
任何形式的帮助都会非常感激,因为我已经花了太多时间来处理这个问题。
解决方案
确保您还具有对所有父目录的读取和执行权限。
例子:
chmod o+x /opt
推荐阅读
- java - 这是在 java 中合并两个 JSONObject(org.json) 对象的最佳方法
- python - 根据列表中的字典中的相同键对创建字典
- angular - 无法获取角度 2 中放置在资产文件夹中的数据
- java - 如何将 Liferay 7 与 Apache POI 集成?- 额外的细节
- android - 如何在 Gitlab CI for android 中管理签名密钥库
- x3d - X3D 无法识别
- php - Wordpress 返回 preg_replace - 内容消失
- angular - Angular6地图不是一个功能
- excel - 为什么我会从此代码中收到 VBA 运行时错误“424”对象必需错误?
- java - Shade-Plugin 构建的多模块应用程序 - 由于缺少 ServletWebServerFactory bean,无法启动 ServletWebServerApplicationContext