I was wondering wether it is possible to create or simulate a file with a content set at creation and the assurance that nobody can ever change the file. If possible, can I do it in java?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
Setting a file to read only is not going to make it so no one can ever change it. It takes about 3 seconds to unset the read only flag. The file can then be opened in a hex editor or other program that can handle the file type and changes can be made.
回答2:
Try:
- file.setReadOnly()
- Runtime.getRuntime().exec("attrib " + "" + file.getAbsolutePath() + "" + " +R"); //(works on Windows)
回答3:
yes we can make read only file in java using setReadOnly() method.
After using this method, you will not be able to write or edit into the file.
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");
}
}
or in this way also.
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());
}
}
回答4:
If you simply just need to create a Read-Only file, then won't the code below be sufficient? Unless I am missing something from your question:
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());
}
}
回答5:
To make it so setWritable(true) does not enable writing again you could extend File and override the setWritable() methods.
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());
}
}
which produces the output:
Before. canWrite? true
Set Writable False. canWrite? false
Set Writable True. canWrite? false