Создать файл только для чтения - PullRequest
4 голосов
/ 28 февраля 2012

Мне было интересно, можно ли создать или смоделировать файл с набором содержимого при создании и гарантией того, что никто не сможет изменить файл. Если возможно, я могу сделать это в Java?

Ответы [ 6 ]

6 голосов
/ 28 февраля 2012

Установка файла только для чтения не сделает его таким, чтобы никто не мог его изменить.Снятие флага только для чтения занимает около 3 секунд.Затем файл можно открыть в шестнадцатеричном редакторе или другой программе, которая может обрабатывать тип файла, и изменения могут быть сделаны.

2 голосов
/ 27 июня 2013

Попробуйте:

  • file.setReadOnly ()
  • Runtime.getRuntime (). Exec ("attrib" + "" + file.getAbsolutePath () + "" + "+ R"); // (работает в Windows)
2 голосов
/ 28 февраля 2012

Если вам просто нужно создать файл только для чтения, не будет ли приведенный ниже код достаточным? Если я не пропустил что-то из вашего вопроса:

import java.io.File;
import java.io.IOException;

public class FileAttributesDemo {

  public static void main(String[] args) throws IOException {
    // Create a new file, by default canWrite=true, readonly=false
    File file = new File("test.txt");
    if (file.exists()) {
      file.delete();
    }
    file.createNewFile();
    System.out.println("Before. canWrite?" + file.canWrite());

    // set to read-only, atau canWrite = false */
    file.setWritable(false);
    System.out.println("After. canWrite?" + file.canWrite());
  }
}
2 голосов
/ 28 февраля 2012

да, мы можем сделать файл только для чтения в Java с помощью метода setReadOnly ().

После использования этого метода вы не сможете писать или редактировать файл.

import java.io.File;

public class FileReadOnly {
  public static void main(String[] args) {
    File file = new File("c:/file.txt");
    file.setReadOnly();
    System.out.println("File is in read only mode");
    }
}

или таким же образом.

import java.io.File;
import java.io.IOException;

public class FileAttributesDemo {

  public static void main(String[] args) throws IOException {
    // Create a new file, by default canWrite=true, readonly=false
    File file = new File("test.txt");
    if (file.exists()) {
      file.delete();
    }
    file.createNewFile();
    System.out.println("Before. canWrite?" + file.canWrite());

    // set to read-only, atau canWrite = false */
    file.setWritable(false);
    System.out.println("After. canWrite?" + file.canWrite());
  }
}
1 голос
/ 28 февраля 2012

Чтобы сделать так, чтобы setWritable (true) не включало запись снова, вы можете расширить File и переопределить методы setWritable ().

import java.io.File;
import java.io.IOException;
import java.lang.Override;

public class FileAttributeDemo2 {
    private static class ReadOnlyFile extends File {
        public ReadOnlyFile(String pathname) {
            super(pathname);
        }

        @Override
        public boolean setWritable(boolean writeable) {
            return setWritable(writeable, true);
        }

        @Override
        public boolean setWritable(boolean writeable, boolean ownerOnly) {
            if (!writeable) {
                return super.setWritable(false, ownerOnly);
            }
            return false;
        }
    }

    public static void main (String[] args) throws IOException {
        File file = new ReadOnlyFile("test.txt");
        if (file.exists()) {
            file.delete();
        }
        file.createNewFile();
        System.out.println("Before. canWrite? " + file.canWrite());

        file.setWritable(false);
        System.out.println("Set writable false. canWrite? " + file.canWrite());

        file.setWritable(true);
        System.out.println("Set writable true. canWrite? " + file.canWrite());

    }
}

, который производит вывод:

Before. canWrite? true 
Set Writable False. canWrite? false 
Set Writable True. canWrite? false
0 голосов
/ 14 мая 2019

Способ только для чтения может быть полезен, хотя его невозможно изменить или взломать. Поэтому, если вы не можете создать недоступный файл, вы можете преобразовать его содержимое в непонятное благодаря некоторым видам алгоритмов шифрования. Например, AES может быть таким полезным

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...