2016-06-15 1 views
0

처음에는 읽기 권한 만있는 xml 파일이 linux에 있습니다. 파일 내용을 업데이트해야합니다. 그래서 Java를 통해 파일 사용 권한 (wx)을 부여하려고합니다. 여기 셸 명령을 사용하여 파일 사용 권한 (rwx) 부여 java

코드이다

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] 
+0

종료를 확인 했습니까? p의 코드? 그것은 무엇을 말하는가? 파일의 권한을 변경하려면 상위 디렉토리에 대한 실행 권한이 필요합니다. – Hok

답변

0

보십시오

pomFile.setWritable(true); 
pomFile.setExecutable(false); 
pomFile.setReadable(false); 

은 또한 당신이 다음, 당신은 Java7를 사용하는 경우 같은

Runtime.getRuntime().exec("chmod 777 file"); 

을위한 기성품 방법이없는 당신이 자바 IO 클래스 등이 시도 할 수 있습니다 다음 사용 가능

setPosixFilePermissions(Path path, Set perms) 

// Example code 

Set<PosixFilePermission> perms = new HashSet<PosixFilePermission>(); 
//add owners permission 
perms.add(PosixFilePermission.OWNER_READ); 
perms.add(PosixFilePermission.OWNER_WRITE); 
perms.add(PosixFilePermission.OWNER_EXECUTE); 
//add group permissions 
perms.add(PosixFilePermission.GROUP_READ); 
perms.add(PosixFilePermission.GROUP_WRITE); 
perms.add(PosixFilePermission.GROUP_EXECUTE); 
//add others permissions 
perms.add(PosixFilePermission.OTHERS_READ); 
perms.add(PosixFilePermission.OTHERS_WRITE); 
perms.add(PosixFilePermission.OTHERS_EXECUTE); 

Files.setPosixFilePermissions(Paths.get(wsPath + "pom.xml"), perms); 
+1

또는 좀 더 간결하게,'Set perms = PosixFilePermissions.fromString ("rwxrwxrwx");'심지어'Set perms = EnumSet.allOf (PosixFilePermission.class);'. – VGR

관련 문제