为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我们可以在Java中更改只读文件的文件属性?

为什么我们可以在Java中更改只读文件的文件属性?

慕森卡 2022-09-28 15:29:52
请考虑以下代码:import java.io.IOException;import java.nio.file.attribute.DosFileAttributeView;import java.nio.file.Files;import java.nio.file.Path;import java.nio.file.Paths;import java.nio.file.attribute.FileTime;import java.time.Instant;public class Word {    public static void main(String[] args){        try{            Path path = Paths.get("readonly.txt");            Files.createFile(path);            DosFileAttributeView dos = Files.getFileAttributeView(path,DosFileAttributeView.class);            dos.setReadOnly(true);            //Files.delete(path); Access denied exception            dos.setHidden(true);            //can change attributes all we want            dos.setTimes(null,FileTime.from(Instant.now()),null);            dos.setReadOnly(false);            Files.delete(path);        }        catch(IOException e){            e.printStackTrace();        }    }}当然,尝试修改只读文件将给我们一个访问消除例外。但是,如代码中所示,这不适用于文件的属性,可以根据需要对其进行修改。当然,这意味着任何人都可以轻松地将只读属性更改回false并根据需要修改文件。那么,为什么这是允许的,有人会如何在Java中创建一个实际的只读文件呢?
查看完整描述

1 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

Windows 文件的安全性由文件上的安全描述符控制。

当然,这意味着任何人都可以轻松地将只读属性更改回false并根据需要修改文件。

不是“任何人” - 只有那些拥有权限的人(见下文)才能这样做。如果您创建了该文件,那么您可以做自己想做的事情也就不足为奇了。但一般来说,我希望其他用户(不是管理员)默认情况下无法影响您的文件。

谁可以更改DOS属性是通过安全描述符控制的 - 特别是通过授予FILE_WRITE_ATTRIBUTES访问权限。当然,必须有人可以清除DOS只读属性,否则......一旦文件被标记为只读,就没有回头路了。通常,如果您创建一个文件,您将完全控制它。

给定用户或用户组是否可以将数据写入文件由访问掩码中的FILE_WRITE_ACCESS位(可能还有其他一些,但这是介绍性答案)控制。如果不向用户授予写入权限,则他们无法写入。如果您真的想阻止某人写入文件,请按照以下步骤操作。

DOS“只读”属性的存在是为了兼容,并且可能作为提示非常有用,表明您确实不想写入此文件,但它不是安全限制。

这些都与Java无关,而是操作系统中文件系统的工作方式。您可以使用 Windows 资源管理器检查文件上的安全设置。


查看完整回答
反对 回复 2022-09-28
  • 1 回答
  • 0 关注
  • 145 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号