Crear un archivo de solo lectura

Me preguntaba si es posible crear o simular un archivo con un contenido establecido en el momento de la creación y la seguridad de que nadie podrá cambiar el archivo. Si es posible, ¿puedo hacerlo en java?

Configurar un archivo para que se lea solo no lo hará así que nadie podrá cambiarlo. Se tarda unos 3 segundos en desactivar la marca de solo lectura. El archivo se puede abrir en un editor hexadecimal u otro progtwig que pueda manejar el tipo de archivo y se pueden hacer cambios.

Tratar:

  • file.setReadOnly ()
  • Runtime.getRuntime (). Exec (“attrib” + “” + file.getAbsolutePath () + “” + “+ R”); // (funciona en Windows)

sí, podemos hacer un archivo de solo lectura en java usando el método setReadOnly ().

Después de usar este método, no podrá escribir ni editar en el archivo.

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"); } } 

o de esta manera también.

 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()); } } 

Si simplemente necesita crear un archivo de solo lectura, ¿no será suficiente el siguiente código? A menos que me esté faltando algo de tu pregunta:

 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()); } } 

Para que setWritable (true) no habilite la escritura otra vez, podría extender File y anular los métodos 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()); } } 

que produce la salida:

 Before. canWrite? true Set Writable False. canWrite? false Set Writable True. canWrite? false