【发布时间】:2016-10-16 15:40:04
【问题描述】:
我在 linux 中有一个 xml 文件,它最初只有读取权限。我需要更新文件内容。所以我试图通过java赋予文件权限(wx)。
代码如下:
File pomFile = new File(wsPath + "pom.xml");
logger.info("Before change: Is Execute allow : " + pomFile.canExecute()); //false
logger.info("Before change: Is Write allow : " + pomFile.canWrite()); //false
logger.info("Before change: Is Read allow : " + pomFile.canRead()); //true
String command = "sudo chmod -R ugo+wx " + wsPath + "pom.xml";
Process p = Runtime.getRuntime().exec(command);
logger.info("After change: Is Execute allow : " + pomFile.canExecute()); //false
logger.info("After change: Is Write allow : " + pomFile.canWrite()); //false
logger.info("After change: Is Read allow : " + pomFile.canRead()); //true
InputStream inputStream = getClass().getResourceAsStream("/output-pom.xml");
String packageName=AppConstants.PACKAGE_DEFAULT+"."+client+"."+projectName;
String pomContent=IOUtils.toString(inputStream);
pomContent=pomContent.replace("<groupId>PACKAGE_NAME</groupId>","<groupId>"+packageName+"</groupId>");
pomContent=pomContent.replace("PROJECT_NAME", projectName);
FileWriter writer = new FileWriter(pomFile, false);
writer.write(pomContent);
writer.close();
设置权限后,pomFile.canWrite() 和 pomFile.canExecute() 显示为 false。 FileWriter 也抛出异常。有什么办法可以解决这个问题?
java.io.FileNotFoundException: wsPath/pom.xml (Permission denied)
at java.io.FileOutputStream.open0(Native Method) ~[na:1.8.0_45]
at java.io.FileOutputStream.open(FileOutputStream.java:270) ~[na:1.8.0_45]
at java.io.FileOutputStream.<init>(FileOutputStream.java:213) ~[na:1.8.0_45]
at java.io.FileWriter.<init>(FileWriter.java:107) ~[na:1.8.0_45]
at com.apptium.eportal.servlet.CreateProjectServlet.doPost(CreateProjectServlet.java:179) ~[classes/:na]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:648) [servlet-api.jar:na]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) [servlet-api.jar:na]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) [catalina.jar:8.0.32]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) [catalina.jar:8.0.32]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) [tomcat-websocket.jar:8.0.32]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) [catalina.jar:8.0.32]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) [catalina.jar:8.0.32]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) [catalina.jar:8.0.32]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) [catalina.jar:8.0.32]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) [catalina.jar:8.0.32]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) [catalina.jar:8.0.32]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) [catalina.jar:8.0.32]
at ch.qos.logback.access.tomcat.LogbackValve.invoke(LogbackValve.java:189) [logback-access-1.1.2.jar:na]
at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:676) [catalina.jar:8.0.32]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) [catalina.jar:8.0.32]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522) [catalina.jar:8.0.32]
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095) [tomcat-coyote.jar:8.0.32]
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672) [tomcat-coyote.jar:8.0.32]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500) [tomcat-coyote.jar:8.0.32]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456) [tomcat-coyote.jar:8.0.32]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_45]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_45]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-util.jar:8.0.32]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_45]
【问题讨论】:
-
你检查p的退出码了吗?它说什么?您需要父目录的执行权限才能更改文件的权限。
标签: java file shell permissions command