문제

그래서 실행 파일이 될 .SH 파일을 작성하려고합니다. 이것이 제가 현재 작성하는 방법입니다.

Writer output = null;

try {
  output = new BufferedWriter(new FileWriter(file2));
  output.write(shellScriptContent);
  output.close();
} catch (IOException ex) {
  Logger.getLogger(PunchGUI.class.getName()).log(Level.SEVERE, null, ex);
}

따라서 파일을 잘 작성하지만 실행 가능하지는 않습니다. 작성시 실행 가능 상태를 변경할 수있는 방법이 있습니까?

편집 : 더 명확히하기 위해, 기본적으로 실행하려고 노력하므로, 예를 들어 생성 된 파일을 두 번 클릭하면 자동으로 실행됩니다.

도움이 되었습니까?

해결책

당신은 그것을 chmod해야하며, 아마도 시스템 명령을 실행하여 다음과 같이 할 수 있습니다.

정말로 필요한 것은 다음과 같은 것을 발사하는 것입니다.

Runtime.getRuntime().exec("chmod u+x "+FILENAME);

그러나 당신이 그것을 더 명시 적으로 추적하고 싶다면 stdin / stderr를 캡처 할 수 있습니다.

Process p = Runtime.getRuntime().exec("chmod u+x "+FILENAME);
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));    
BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));

내가 여기서 얻은 것 :http://www.devdaily.com/java/edu/pj/pj010016/pj010016.shtml

업데이트:

테스트 프로그램 :

package junk;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class Main{
  private String scriptContent = '#!/bin/bash \n echo "yeah toast!" > /tmp/toast.txt';
  public void doIt(){
    try{
      Writer output = new BufferedWriter(new FileWriter("/tmp/toast.sh"));
      output.write(scriptContent);
      output.close();
      Runtime.getRuntime().exec("chmod u+x /tmp/toast.sh");
    }catch (IOException ex){}
  }

  public static void main(String[] args){
    Main m = new Main();
    m.doIt();
  }

}

Linux에서 파일 브라우저를 열고 /tmp/toast.sh를 두 번 클릭하고 실행하도록 선택하면 'Yeah Toast'라는 단어와 함께 텍스트 파일 /tmp/toast.txt를 생성해야합니다. 나는 Mac이 후드 아래 BSD이기 때문에 똑같이 할 것이라고 생각합니다.

다른 팁

전화해도됩니다 File.setExecutable() 파일에 대한 소유자의 실행 파일 비트를 설정하려면 경우에 충분할 수 있습니다. 아니면 그냥 할 수 있습니다 chmod 시스템 호출과 함께 직접 Process.

ALAS, 파일 권한의 최대 구동 프로그래밍 변경 사항은 Java 7까지 사용할 수 없습니다. 새로운 IO 기능 세트의 일부가 될 것입니다. 여기.

Java 7에서는 전화 할 수 있습니다 Files.setPosixFilePermissions. 예는 다음과 같습니다.

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.PosixFilePermission;
import java.util.Set;

class FilePermissionExample {
  public static void main(String[] args) throws IOException {
    final Path filepath = Paths.get("path", "to", "file.txt");
    final Set<PosixFilePermission> permissions = Files.getPosixFilePermissions(filepath);
    permissions.add(PosixFilePermission.OWNER_EXECUTE);
    Files.setPosixFilePermissions(filepath, permissions);
  }
}

Mac OS X에서는 chmod +x 외에 .command 쉘 스크립트로 확장하여 두 번 클릭하여 시작하려면.

이 답변 나는 그 질문에 썼다 프로그래밍 방식으로 파일 권한을 어떻게 변경합니까? Mac OS X에서 작동 해야하는 JNA를 사용하여 기본 호출을 통해 CHMOD 예제를 보여줍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top