В доступе отказано, когда файл заархивирован в Java

Учитывая следующие коды, которые я использую, чтобы заархивировать файл '.gz':

public class TestCSVDataToMap {
    private static final String INPUT_GZIP_FILE = "/opt/old.csv.gz";
    private static final String OUTPUT_FILE = "/opt/new.csv";
    public static void main(String[] args) throws IOException{
        TestCSVDataToMap dm = new TestCSVDataToMap();
        dm.gunzipIt();
    }

public void gunzipIt(){

     byte[] buffer = new byte[1024];

     try{

         GZIPInputStream gzis = 
            new GZIPInputStream(new FileInputStream(INPUT_GZIP_FILE));

         FileOutputStream out = 
            new FileOutputStream(OUTPUT_FILE);

        int len;
        while ((len = gzis.read(buffer)) > 0) {
            out.write(buffer, 0, len);
        }

        gzis.close();
        out.close();

        System.out.println("Done");

    }catch(IOException ex){
       ex.printStackTrace();   
    }
   } 

}

выбрасывает такое исключение:

java.io.FileNotFoundException: /opt/new.csv (Permission denied)

это потому, что путь '/opt' не может вносить какие-либо изменения. Но я могу использовать

sudo gunzip /opt/old.csv.gz

разархивировать файл. Итак, что я должен делать в Java, чтобы действовать как "sudo"?

2 ответа

Там нет стандартного способа sudo на Яве. Но вы можете sudo ваша программа на Java sudo java TestCSVDataToMap,

Java не предназначена для управления правами доступа к процессам ОС.

Начни свой java процесс с sudo

sudo java -jar myjar.jar

Или, напишите в папку, у вас есть разрешение на запись (например, /tmp или же $HOME).

Другие вопросы по тегам