创建只读文件

时间:2012-02-28 06:12:11

标签: java file protection readonly

我想知道是否可以创建或模拟在创建时设置内容的文件,并确保没有人可以更改文件。 如果可能的话,我可以在java中做到吗?

7 个答案:

答案 0 :(得分:6)

将文件设置为只读是不可能的,所以没有人可以更改它。取消设置只读标志大约需要3秒钟。然后可以在十六进制编辑器或其他可以处理文件类型的程序中打开该文件,并可以进行更改。

答案 1 :(得分:2)

是的,我们可以使用setReadOnly()方法在java中创建只读文件。

使用此方法后,您将无法编写或编辑该文件。

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

答案 2 :(得分:2)

如果您只是需要创建一个只读文件,那么下面的代码是否足够?除非我遗漏了你的问题:

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

答案 3 :(得分:2)

尝试:

  • file.setReadOnly()
  • Runtime.getRuntime()。exec(“attrib”+“”+ file.getAbsolutePath()+“”+“+ R”); //(适用于Windows)

答案 4 :(得分:1)

为了使它成为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

答案 5 :(得分:0)

只读方式可能很有用,尽管并非不可能更改或破解,所以如果您无法创建无法访问的文件,则可以使用某种加密算法将其内容转换为无法理解的文件,例如AES可能如此有用。

答案 6 :(得分:0)

在这种情况下,您只需使用File类创建一个文件,然后通过引用就必须调用setReadOnly()方法。

    File f=new File("abc.txt");
    f.setReadOnly();