JAVA unix / Win OS / 文件目录创建、删除 和 目录权限(file permission)

 1 文件目录创建、删除(适用于unix \ Win XP 系统  ;Win 7未测试)

       public static  Boolean createScrrenManagerFolder(String savePath){
        Boolean isBln = false;
        String   savePath =HttpServletRequest.getServletContext().getRealPath("");
        String lastsFolderPath = "";

       String partPathString = "";

        SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd/HHmmss");// 设置日期格式
        String systime = df.format(new Date());
        String partPathString = systime.substring(0, systime.lastIndexOf("/")+1);
        try{
            if (savePath.indexOf("wtpwebapps") != -1) {//eclipse 调试状态下的项目路径
                int index1 = savePath.indexOf("\\.");
                int index2 = savePath.lastIndexOf("\\");
                lastsFolderPath = savePath.substring(0, index1) + savePath.substring(index2, savePath.length()) + "\\WebContent\\" ;
            } else {//war包运行状态下的项目路径
                lastsFolderPath = savePath + "/" ;
            }
            lastsFolderPath = lastsFolderPath +"resources/upload/picture/uuid/"+partPathString;//eg:E:\Tomcat7\vCat/2013/05/07/
            File fp = new File(lastsFolderPath);  
            // 创建目录
            if (!fp.exists()) {
                fp.mkdirs();// 目录不存在的情况下,创建目录。
            }
            isBln = true;
        }
        catch(Exception e){
            isBln = false;
            e.printStackTrace();
        }
        return isBln;
    }

**====================================//4 递归删除空目录(只删除空的四级目录:%path%/uuid/2013/06/21/)================================**
    public void delFolderFour(){      

            Integer folderDeep = 4 ;
            while (lastsPath.indexOf("/") != -1  && ( (folderDeep--) > 0) ) {
                if( "0".equals(delFolder(lastsPath.trim())) ){
                    lastsPath = lastsPath.substring(0,lastsPath.length()-1);
                    lastsPath = lastsPath.substring(0,lastsPath.lastIndexOf("/"));
                }
                else{
                    break;
                }
            }

}

 //    递归删除空目录
    public static String delFolder(String filePath) {
        String isBln = "0";//含有空目录
        File fp = new File(filePath);
        try{
            // 递归删除空目录
            if (fp.exists() && fp.isDirectory()) {
                File[] files = fp.listFiles();
                if (files.length == 0) {// 空文件夹
                    fp.delete();
                }
                else{
                    isBln = "1" ;// 不为空文件夹,直接跳出,不用检查此目录的上级目录是否为空文件夹
                }
            }
        }
        catch(Exception e){
            isBln = "2";//异常,直接跳出
        }
        return isBln;
    }

**========================================目录权限(file permission)=======================================**

 2 目录权限(file permission)

http://docs.oracle.com/javase/6/docs/api/java/io/File.html(API )

前言:

         In Java, file permissions are very OS specific: *nix , NTFS (windows) and FAT/FAT32, all have different kind of file permissions. Java comes with some generic file permission to deal with it.

Check if the file permission allow :

  1. file.canExecute(); – return true, file is executable; false is not.
  2. file.canWrite(); – return true, file is writable; false is not.
  3. file.canRead(); – return true, file is readable; false is not.

Set the file permission :

  1. file.setExecutable(boolean); – true, allow execute operations; false to disallow it.
  2. file.setReadable(boolean); – true, allow read operations; false to disallow it.
  3. file.setWritable(boolean); – true, allow write operations; false to disallow it.
  4. separatorChar

    public static final char separatorChar
    The system-dependent default name-separator character. This field is initialized to contain the first character of the value of the system propertyfile.separator. On UNIX systems the value of this field is'/'; on Microsoft Windows systems it is'\\'.

         In *nix system, you may need to configure more specifies about file permission, e.g set a 777 permission for a file or directory, however, Java IO classes do not have ready method for it, but you can use the following dirty workaround :

Runtime.getRuntime().exec("chmod 777 file");


2.1 操作java.io Class File 类:

WIN OS:如对1添加权限:

.......

// 创建目录

  if (!fp.exists()) {

    fp.mkdirs();// 目录不存在的情况下,创建目录。

   if( !fp.canRead() ){

      fp.setReadable(true);
   }
    if( !fp.canWrite() ){
      fp.setWritable(true);
    }
   if( !fp.canExecute() ){
     fp.setExecutable(true);
   }
 }

.......


2.2 操作java.io Class  FilePermission类:(未研究)      

http://www.cjsdn.net/doc/jdk50/java/security/Permission.html(API) 

2.3  在*nix系统中,配置文件权限,文件的权限为777. (java IO类没有相关方法)

public static void updatefilePermi(){
        if( -1 != System.getProperties().getProperty("os.name").toLowerCase().indexOf("windows") ){
            //1 windows OS:通过io File类对文件路径赋予读写权限

           //如上
        }
        //1 2 其它操作系统 :通过untime.getRuntime().exec()执行command对文件路径赋予读写权限 ,待验证后进行修正
        String filepath = "";
        String command = "chmod 777 " + filepath ;
        Runtime runtime = Runtime.getRuntime();
        try {
            Process exec = Runtime.getRuntime().exec(command);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、UNIX文件系统的基本原理        UNIX采用树型目录结构,每个目录表称为一个目录文件。一个目录文件是由目录项组成的。每个目录项包含16B,一个辅存磁盘块(512B)包含32个目录项。在目录项中,第1、2字节为相应文件的外存i节点号,是该文件的内部标识;后14B为文件名,是该文件的外部标识。所以,文件目录项记录了文件内、外部标识的对照关系。根据文件名可以找到辅存i节点号,由此便得到该文件的所有者、存取权、文件数据的地址健在等信息。UNIX的存储介质以512B为单位划分为块,从0开始直到最大容量并顺序加以编号就成了一个文件卷,也叫文件系统。本次课程设计是要实现一个简单的模拟UNIX文件系统。我们在磁盘中申请一个二进制文件模拟UNIX内存,依次初始化建立位示图区,I节点区,数据块区。 二、基本要点思路         1、模拟磁盘块的实现:因为文件系统需要从磁盘中读取数据操作数据,在实现时是使用文件来模拟磁盘,一个文件是一块磁盘,在文件中以划分磁盘块那样划分不同的区域,主要有三个区域:位图区,inode索引节点区,磁盘块区。位图区我是使用一个512byte的数组存放,inode区和磁盘块区我采用一种自认为比较巧妙的方法,就是存放对象列表,之前说过,在本次实验的所有的结构都使用对象进行存储,而inode节点和磁盘块就是两个重要的数据结构,在初始化时我实例化32个inode对象和512个block对象(至于这些类的具体定义下面会提到),然后将这些对象加入各自对应的对象列表中,在存储时,使用java的对象序列化技术将这个对象数组存到磁盘中。当使用文件系统时,程序会先从磁盘文件中读取出位图数组,inode对象列表,block对象列表,之后的操作就是通过对这些列表进行修改来实现。使用这种方法可以减小存储的空间(对象序列话技术)而且不需要在使用时进行无用的查找,只要第一次初始化中将这些对象都读取出来。        2、界面的实现:在实现这个文件系统时使用了两种方案,一种是直接在java控制台来进行输入输出,因为原本想着UNIX文件系统原本也是使用的命令行语句,所以在控制台上实现也很接近。后来在老师的建议下又将整个程序重新修改,改成在UI界面上进行输入输出,这样确实界面美观舒服了不少,只不过两者用的技术很不一样,前者主要使用的是系统的输入输出流,后者使用java监听器。        3、权限的实现:在实现多用户的权限方面,我给文件和文件夹各定义了三级权限1、访问:在文件中是可以查看文件的内容,在文件夹中是可以进入该文件夹。2、修改:文件中是可以对文件进行编辑,文件夹中是可以在该文件夹中创建新的文件或目录。3、删除:顾名思义。文件或文件夹的创建者拥有最高级别的权限,只有拥有最高级权限的用户才可以给其他用户针对该文件或文件夹进行授权和授权操作。在每次对文件或文件夹进行访问修改删除操作时都会检查当前用户在该文件或文件夹所拥有的权限,只有拥有的权限大于想要实现的权限时才可以进行该操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值