A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 zms2100 于 2013-5-9 21:25 编辑

题外话: 纪念泡论坛第四天,也希望此贴是纪念自己技术分达到25分的贴,O(_)O~…………..(这是最近自己对毕老师说的对文件遍历操作的深究,本来想写的但懒,不过刚才论坛里有人也遇到这样的问题,就贴出来普及下,呵呵)

回到题上来,技术贴: 系统文件权限了解与修改(除非电脑大神,否则只建议了解或修改普通文件作为尝试,否则如果你的电脑有冒烟或蓝屏均与本贴以及我无关啊,O(_)O~)

       1、为什么要了解系统文件权限?
    : 在实际应用中,有时候Java程序需要访问或遍历系统中的文件夹或文件(下面以文件夹统称,通常保护是以文件夹作为整体),而在遍历系统中的文件夹时通过都会遇到空指针异常(NullPointerException)
       如上图,但这是为什么呢?
       因为Window系统等为了防范一般电脑使用者不小心删除系统文件等(也是为了阻止一些恶意程序破坏电脑程序,所以就提供了对于系统中的文件的访问、修改等的权限设置功能。
       因此当Java程序访问到系统中受保护的文件时就会返回null(通常Java程序是用File类中的list类型的方法来获取文件等的路径名称),而遍历该File[]数组时就会抛出空指针异常。
       说了这么多,你怎么能不继续往下了解怎么修改这个权限呢,O(_)O~

———————————————电脑文件的权限与状态————————————————
2、了解文件的权限以及状态 :
将电脑文件简单分成两种权限类型、两种状态(当然权限下面会提到,一堆的权限功能)。

A、完全控制权限: 电脑系统中一般文件的默认系统权限,Java可操作的文件是建立在这种权限上,此权限分为两种状态 :      
       非隐藏状态 : 默认的显示状态,此权限下的这种状态文件,Java程序可对其进行IO流的读取、写入操作(包括复写功能)。
       隐藏状态 : 即隐藏文件/文件夹,隐藏状态的文件,JavaIO流技术只能对其进行读取和追加数据操作(即不能复写该文件)。
     【除了正在操作中的文件,只要是这种权限的文件都能够被删除,包括隐藏状态】

B、保护(限制)权限: 系统中可对文件进行不同类型的权限保护(限制),禁止访问、禁止删除、禁止添加数据等。
       在系统盘(C盘等)中会有不少系统文件夹被设置为此类权限,即拒绝访问(列出文件、读取数据)该文件等,所以当访问、遍历该文件夹时,File类的list()等方法会返回null值,那么在遍历返回的File[]数组时就会发生空指针异常。
【贴一张权限图,不过是以win7系统为例,xp可能有少许出入,至少界面肯定不同,O(_)O~


只挑几个来说,当然大家也可以自己去尝试,不过建议,新建个文件夹(没用嘛,弄坏了也不会冒烟,呵呵)
(当该权限被定义为拒绝时)
1列出文件/读取数据   结果就是你将无法打开那个文件夹,Java程序访问该文件遍历回来的结果就是null,导致空指针异常。

(里面有些功能是要同时打钩的)
2、删除子文件夹及文件、删除 定义为拒绝时,在系统中你将无法对其进行删除操作,会提示需要什么其他管理员权限(改回去就好了,呵呵)

3、创建等的选项点成拒绝,就是字面意思,不能够在文件夹里创建文件夹等。
4、其他的就不多说了,可以适当的尝试,不过了解下就可以了,O(_)O~
【注: 如果要模拟操作且不懂在哪里找到修改文件权限的看下面第3条,不喜好的可以跳过】

————————————————修改文件权限————————————————————
3、操作步骤 :
A 右键指定文件或文件夹,点击属性,会出现下面的文件框:
点击“安全”,出现下面窗体 :
【点击“高级”
点击“更改权限”后会出现类似的窗体,如下 :  在这一步就必须要选择系统管理员的选项(如黑框),在有的时候部分文件不能找到Administration(当然前提是你的系统管理员名称是这个,另外不要跟Administrations 相混淆,一个是有s 的,而我们可操作的是没有s Administration 。)
【在这里就可以点击“编辑”键,进入到文件权限的修改位置,但是在修改出来后点击确定是电脑会提醒你是否确认修改等……….如果你自己确定修改,那么就点确认】
注:如果没有该选项,那么就要点击“添加”按钮,然后在下面提示的指定位置填写本机的系统管理员名称,之后点下检查名称,如果它有帮你补充就是对的,之后点确定。


好了,剩下的就是不断的修改,重复测试,这就不讲了,O(_)O~
(最后还是提醒不要轻易去碰系统盘等中的保护文件,呵呵)

—————————————————解决方案———————————————————
       (太多字,论坛竟然有字数限制,这可以我辛苦打的啊,解决方案见下方)





19 个回复

倒序浏览
————————————————————解决方案————————————————————————————————————
4、Java程序时可以遍历到系统中的隐藏文件、以及系统级隐藏的保护文件(即:即使你是显示隐藏文件也看不到,不过可以在那个改显示隐藏文件的地方有个取消隐藏受系统保护的文件的勾,取消了就能看,这个就不要随便改了,看下最好就改回去,例子有开头第一张图出现异常的那个文件夹)

       下面是解决方案: (不过只是提醒和思路,大家可以自己去想想别的方案或去实现它)
    (在上面说了,即使是Window系统中默认将这些受保护的系统文件进行隐藏,但是一般的遍历还是会搜索到,容易发生NullPointerException,建议如下: )
    A、尽量不要“全盘”访问或操作系统盘中的文件与文件夹;
    B、如果需要进行全盘遍历操作,建议对File类的方法返回的数据进行判断操作,判断返回值是否null,如果为null,建议跳出该文件或文件夹,不对其进行遍历、输出其中的文件对象。
       (你都没有去操作它了,肯定就不会抛空指针异常)
       C、直接对该异常进行处理,这个其实没有B 那个来的好,因为处理异常,程序肯定就会停掉了。
——————————————————————————完美分割线———————————————————————————————
最后感谢汪版主、曹版主还有被我调侃过的昆哥等,我这几天的技术分都你们给点评加上来的,希望这贴能助我实现25分,不用等待忙碌的滔哥的“滔哥的幸福”来实现,呵呵O(∩_∩)O~。
明天起,可能少逛论坛,帮助解答了,最近忙着弄技术分,2天的基础课程看了快5天,555555……..
(当然有空或学完基础了会来探讨下技术问题的,最近还是学到不少东西的,O(∩_∩)O~)
回复 使用道具 举报
{:soso_e181:}
回复 使用道具 举报
我要黑马币{:3_51:}
回复 使用道具 举报

回帖奖励 +2

楼主没中奖。。
回复 使用道具 举报
我来抽抽奖{:3_47:}
回复 使用道具 举报
{:3_58:}我要币币币
回复 使用道具 举报
我来抽抽奖
回复 使用道具 举报

回帖奖励 +2

{:3_49:}没看懂
回复 使用道具 举报
LL.t 中级黑马 2014-10-7 17:23:49
10#

回帖奖励 +2

一边看看 顺带抽奖来了;P
回复 使用道具 举报
一边看看 顺带抽奖来了
回复 使用道具 举报
抽个奖看看运气?
回复 使用道具 举报
看懂了一点点点
回复 使用道具 举报

回帖奖励 +2

学习学习!!
回复 使用道具 举报
不错不错啊
回复 使用道具 举报

回帖奖励 +2

不错不错啊
回复 使用道具 举报
不错不错啊
回复 使用道具 举报
不错不错啊
回复 使用道具 举报
好贴,学习了
回复 使用道具 举报
谢谢谢谢谢谢谢谢谢谢谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马