工作记录:File类设置文件权限你用对了吗?

最近项目上用到File类去创建文件夹和图片,在通过Nginx直接访问图片的时候,Nginx返回403没有访问权限的问题。


文件权限

(1)查看文件权限

通过命令ls -l可以查看文件夹或文件的权限信息

drwxr-xr-x:

d:directory的开头字母,表示文件是一个目录。-表示文件。

rwxr-xr-x:9位标识,前三个标识表示当前文件拥有者拥有的权限,中间三个标识表示与文件拥有者所在同一个组内成员拥有的权限,最后三个标识表示其他人员拥有的权限。

r:read,读权限

w:write,写权限

x:execute,执行权限,即可以运行该文件(脚本等)

(2)更改文件权限

使用二进制表示,拥有权限用1表示,没有权限用0表示,则rwxr-xr-x可以表示为111101101。将三种用户的权限分开表示则为111 101 101,将各二进制转换成10进制为:7 5 5。

执行命令: chmod 权限值 文件,比如chmod 755 this_is_dirctory。

更详细的chmod介绍和使用,请戳《Linux chmod 命令 | 菜鸟教程

(3)文件需要存在

当对一个不存在的文件设置权限的时候,会报错。

(4)默认权限

当创建目录或者文件的时候,操作系统会分配默认权限。默认权限可以更改。

在我使用的操作系统上,目录的默认权限为:rwxr-xr-x

文件的默认权限为:rw-r--r--


Java创建文件并设置权限

使用File类创建文件。

package java.io;
public class File
    implements Serializable, Comparable<File>

(1)代码

代码的用意是在目录/upload下创建一个this_is_directory目录,以及this_is_file文件。并且给目录this_is_directory三种用户都分配福读、写、执行权限,给文件this_is_file三种用户都分配读、执行权限。

FileOutputStream out = null;
try {
    File dir = new File("/upload/this_is_directory");
    if (!dir.exists() && !dir.isDirectory()) {
        dir.setWritable(true, false);
        dir.setReadable(true, false);
        dir.setExecutable(true, false);
        dir.mkdirs();
    }

    File file = new File("/upload/this_is_file");
    file.setReadable(true, false);
    file.setExecutable(true, false);
    out = new FileOutputStream(file);
    //out.write(content);
    out.flush();
} catch (Exception e) {
    e.printStackTrace();
} finally {
    if (out!=null) {
        try {
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

运行上述代码,当查看目录和文件权限的时候,发现并不是如预期那样,而是使用的默认权限。问题是出在生成文件和分配权限代码的顺序错误了,即

dir.setWritable(true, false);
dir.setReadable(true, false);
dir.setExecutable(true, false);
dir.mkdirs();

正确的顺序应该为:

dir.mkdirs();
dir.setWritable(true, false);
dir.setReadable(true, false);
dir.setExecutable(true, false);

这里是因为当执行setWritable、setReadable、setExecutable方法的时候,会去给文件设置权限,而此时文件还不存在,所有权限不会生效。要等文件创建成功存在了之后才能设置权限。(文件不存在设置权限失败,即上面的第(3)条)

正确的代码:

FileOutputStream out = null;
try {
    File dir = new File("/upload/this_is_directory");
    if (!dir.exists() && !dir.isDirectory()) {
        dir.mkdirs();
        // 需要等文件夹创建了之后,再去设置权限
        dir.setWritable(true, false);
        dir.setReadable(true, false);
        dir.setExecutable(true, false);
    }

    File file = new File("/upload/this_is_file");
    out = new FileOutputStream(file);
    //out.write(content);
    out.flush();
    // 等文件创建之后,再设置权限
    file.setReadable(true, false);
    file.setExecutable(true, false);
} catch (Exception e) {
    e.printStackTrace();
} finally {
    if (out!=null) {
        try {
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实 训 报 告 (2) 学号:1035001408324 姓名:朱亚松 专业:计算机网络(专科) 班级: "课程 " 网络应用服务管理 " "名称 " " "实验 "FTP服务器配置 " "项目 " " "实验 "掌握安装FTP服务器 " "目的 "掌握对FTP服务器的设置 " " "掌握如何使用Serv-U架设FTP服务器 " "实验 " Windows Server 2003 " "环境 " " " "一、安装IIS组件 " "实验 "1、单击"开始—设置—控制面板—添加/删除程序"; " "内容 "2、选择"配置Windows",单击"组件"按扭,添加IIS组件; " "(算 "二、设置ftp " "法、 "1、单击"开始—程序—管理工具—Internet服务管理器"; " "程序 "2、在Internet服务器管理单元中选中默认FTP服务器; " "、步 "3、在"属性"对话框中单击"主目录"选项卡,然后指定主目录位置" "骤和 "(缺省值:c:\inetpub\ftproot,端口号21)。 " "方法 "三、用ftp向导新建一个ftp站点 " ") "1、选中ftp服务器,右键单击"新建—ftp站点"; " " "2、单击向导"下一步",在说明中输入ftp的名称; " " "3、在站点IP地址栏中输入服务器的IP地址和端口值; " " "4、输入新站点的主目录路径,可用浏览的方法; " " "5、设置访问ftp的方式。 " " "四、测试新建的网站 " " "1、单击"开始—程序—管理工具—Internet服务管理器",打开Inter" " "net信息服务单元,选中"默认ftp站点",打开快捷菜单的"停止" " " ",这样先关闭原来的ftp网站; " " "2、选中"youngmei"ftp站点,打开快捷菜单的"启动"; " " "3、在客户端打开IE浏览器,访问新建网站。 " " "单击向导"下一步",在说明中输入该站的网站名称。 " " " " " "设置虚拟目录 " " "目录作用是在地址栏中除了输入主机名外,还用"/目录名"来进一" " "步指向某个子目录或网页文件。 " " "1、单击"开始—程序—管理工具—Internet服务管理器",打开Inter" " "net信息服务单元,选中准备新建虚拟目录的网站"默认ftp站点" " " ",打开快捷菜单的"新建—虚拟目录" 。 " " "2、在向导的提示下输入别名,即虚拟目录名,如"my virtual " " "directory"。 " " "3、在向导的提示下输入网页文件的真实路径。实际路径的文件夹" " "甚至可以在别的主机上,可以通过"浏览"查找。 " " "4、除了在客户端打开IE外,也可以直接在当前服务器上查看。输" " "入网址http://localhost/my virtual directory。 " " "六、用Serv-U架设FTP服务器 " " "1、安装Serv-U " " "2、运行Serv-U,提示定义域 " " " " " "3、提示无用户,添加用户,设置用户名,密码,FTP文件夹 " " "4、设置完成效果如图 " " " " " "5、通过IE浏览器访问建立的网站,在弹出的对话框内输入设置的" " "用户和密码。 " "数据 "一、访问用IIS架设的FTP服务器 " "记录 " " "和计 " " "算 "访问用Serv-U架设的FTP服务器如上图 " "结论 "FTP(File Transfer " "(结 "Protocol),文件传输协议的简称。用于Internet上的控制文件 " "果) "的双向传输。同时,它也是一个应用程序(Application)。用户" " "可以通过它把自己的PC机与世界各地所有运行FTP协议的服务器相" " "连,访问服务器上的大量程序和信息。正如其名所示:FTP的主要" " "作用,就是让用户连接上一个远程计算机(这些计算机上运行着F" " "TP服务器程序)察看远程计算机有哪些文件,然后把文件从远程 " " "计算机上拷到本地计算机,或把本地计算机的文件送到远程计算 " " "机去。 " " "Serv-U是一种被广泛运用的FTP服务器端软件,支持3x/9x/ME/NT/" " "2K等全Windows系列。可以设定多个FTP服务器、限定登录用户的 " " "权限、登录主目录及空间大小等,功能非常完备。 " " "它具有非常完备的安全特性,支持SSl " " "FTP传输,支持在多个Serv-U和FTP客户端通过SSL加密连接保护您" " "的数据安全等。 " "小 " 通过这次试验,深入理解了关于FTP的知识,对FTP有了深一 " "结 "层的认识。能够将自己的东西放到网上
特性:1.小巧实用的多用户文件管理系统,可设置多个管理员帐号;2.可事先设置部门分,将文件上传至指定分,除高级和超级用户外,只有部门内的人员才能访问,其他人则无法下载,方便快捷;3.开发了站内短消息系统,新用户注册后就会收到系统的消息确认,注册用户间可以相互发送消息,管理员则可以发4.送面对所有用户的系统消息;5.系统会自动记录用户的操作及上传或删除了什么文件;6.设有一键备份及还原系统,备份数据后会在根目录下产生一个名为leasinWJData.rar的压缩包,只要有此文件存在,只需要点击一下还原,就可以还原到备份前的状态,此还原只针对上传的文件,用户数据不会受影响;7.无需mysql支持,占用空间小;8.当用户忘记密码时可自助找回密码,是一个很不错的系统; 此系统比较适合用作单位内部文件的传递,所以没有开放的注册口,所有用户需要管理员添加,如需要可以在下载后自己添加一个注册接口。 程序目录说明:1.use为用户文件夹 2.file内为用户上传的文件 3.mydata/ml.dat为目录分 4.mydata/wj.dat为上传文件列表 5.record为记录用户操作的文件夹 后台管理帐号:admin 密码:123456更新:1.加入了文件搜索及快速打开功能,便于在众多的文件中快速找到想要的文件;2.删除了部分冗余代码,修改美化了部分页面; 3.更正了因部分系统不支持导致的用户发布或下载文件后其它文件会消失的缺陷;4.加入了禁止外部提交下载文件的功能,有效保护系统安全; 5.更正了用户管理页面不能对用户进行分页显示的缺陷;6.所有用户都可以自助修改资料,但无法修改用户名、权限,超级管理员则可以进行任何修改;7.可在后台设置系统状态是打开还是关闭,选择关闭后超级仍然可以正常进入,但其它用户无法使用系统;8.对部分功能进行了优化整合,使系统更小巧美观;9.每个文件都可以记录用户下载情况,便于了解文件传阅情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值