亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java文件、文件夾權(quán)限修改的兩種方法

 更新時間:2019年08月07日 10:45:45   作者:娶個昵稱好難  
這篇文章主要給大家介紹了關(guān)于Java文件、文件夾權(quán)限修改的兩種方法,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

前言

Java 修改文件權(quán)限這個應(yīng)該是老生常談的功能,但是最近發(fā)現(xiàn)以前寫的代碼有一點點安全隱患,所以把代碼改成NIO的方式,下面會介紹2種修改文件,文件夾權(quán)限的方法。

使用File類

這個方式是以前最常見的方式,但是這個方式有點缺點在LINUX或者UNIX系統(tǒng)下,需要顯示的指定權(quán)限為440,770等就顯得不是那么好用了。

File dirFile = new File(dirPath);
dirFile.setReadable(true, false);
dirFile.setExecutable(true, false);
dirFile.setWritable(true, false);

因此我們通常會采用一些workaround的方式修改文件夾權(quán)限,必須我需要在LINUX上設(shè)置權(quán)限為770

Runtime runtime = getRuntime();
String command = "chmod 770 " + dirPath;
try {
  Process process = runtime.exec(command);
  process.waitFor();
  int existValue = process.exitValue();
  if(existValue != 0){
    logger.log(Level.SEVERE, "Change file permission failed.");
    }
   } catch (Exception e) {
    logger.log(Level.SEVERE, "Command execute failed.", e);
   }

這種方式會有一個問題,當dirPath中包含空格或者分號的時候,不僅僅對功能有影響,對安全也是有隱患的。

情況1: dirPath = /home/a aa.txt

在LINUX系統(tǒng)中執(zhí)行的命令是 chmod 770 /home/a aa.txt , 系統(tǒng)會認為修改/home/a 和aa.txt 的文件權(quán)限為770,修改文件權(quán)限失敗

情況2: 當dirPath = /home/aaa.txt;rm test.txt

這時在LINUX系統(tǒng)中會執(zhí)行2條指令:

chmod 770 /home/omc/aaa.txt
rm test.txt

這時就會出現(xiàn)安全隱患。

NIO方式

private void changeFolderPermission(File dirFile) throws IOException {
  Set<PosixFilePermission> perms = new HashSet<PosixFilePermission>();
  perms.add(PosixFilePermission.OWNER_READ);
  perms.add(PosixFilePermission.OWNER_WRITE);
  perms.add(PosixFilePermission.OWNER_EXECUTE);
  perms.add(PosixFilePermission.GROUP_READ);
  perms.add(PosixFilePermission.GROUP_WRITE);
  perms.add(PosixFilePermission.GROUP_EXECUTE);
  try {
    Path path = Paths.get(dirFile.getAbsolutePath());
    Files.setPosixFilePermissions(path, perms);
  } catch (Exception e) {
    logger.log(Level.SEVERE, "Change folder " + dirFile.getAbsolutePath() + " permission failed.", e);
    }
  }

從API 查詢知道,NIO的這種方式原生支持LINUX和UNIX低層系統(tǒng),但測試發(fā)現(xiàn)在Windows系統(tǒng)下面不區(qū)分文件所有者和其它似乎沒有效果,這個和實用File是一致的。從底層代碼發(fā)現(xiàn),還是使用的File類

另外可能會拋出UnsupportedOperationException IOException SecurityException

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • idea pom導(dǎo)入net.sf.json的jar包失敗的解決方案

    idea pom導(dǎo)入net.sf.json的jar包失敗的解決方案

    JSON(JavaScript Object Notation,JS對象簡譜)是一種輕量級的數(shù)據(jù)交換格式,這篇文章主要介紹了idea pom導(dǎo)入net.sf.json的jar包失敗的解決方案,感興趣的朋友一起看看吧
    2023-11-11
  • springboot讀取bootstrap配置及knife4j版本兼容性問題及解決

    springboot讀取bootstrap配置及knife4j版本兼容性問題及解決

    這篇文章主要介紹了springboot讀取bootstrap配置及knife4j版本兼容性問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • springboot 啟動如何修改application.properties的參數(shù)

    springboot 啟動如何修改application.properties的參數(shù)

    這篇文章主要介紹了springboot 啟動如何修改application.properties的參數(shù)方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringAOP中@Pointcut的用法詳解

    SpringAOP中@Pointcut的用法詳解

    這篇文章主要介紹了SpringAOP中@Pointcut的用法詳解,Pointcut(切點)是面向切面編程中的一個非常重要的概念,此概念由spring框架定義,Pointcut只是一種篩選規(guī)則,需要的朋友可以參考下
    2023-08-08
  • java實現(xiàn)文件和base64相互轉(zhuǎn)換

    java實現(xiàn)文件和base64相互轉(zhuǎn)換

    這篇文章主要為大家詳細介紹了java如何實現(xiàn)文件和base64相互轉(zhuǎn)換,文中的示例代碼講解詳細,具有一定的參考價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • java之CSV大批量數(shù)據(jù)入庫的實現(xiàn)

    java之CSV大批量數(shù)據(jù)入庫的實現(xiàn)

    本文主要介紹了java之CSV大批量數(shù)據(jù)入庫的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Spring?boot2.0?實現(xiàn)日志集成的方法(2)

    Spring?boot2.0?實現(xiàn)日志集成的方法(2)

    這篇文章主要介紹了Spring?boot2.0?實現(xiàn)日志集成的方法,上一章講解了spring?boot日志簡單集成,這篇我們將日志進行分類,常規(guī)日志、異常日志、監(jiān)控日志等,需要將日志輸出到不同的文件,具體內(nèi)容需要的小伙伴可以參考一下
    2022-04-04
  • Java中幾種常用數(shù)據(jù)庫連接池的使用

    Java中幾種常用數(shù)據(jù)庫連接池的使用

    數(shù)據(jù)庫連接池在編寫應(yīng)用服務(wù)是經(jīng)常需要用到的模塊,太過頻繁的連接數(shù)據(jù)庫對服務(wù)性能來講是一個瓶頸,使用緩沖池技術(shù)可以來消除這個瓶頸,本文就來介紹Java常見的幾種,感興趣的可以了解一下
    2021-05-05
  • Spring-AOP @AspectJ切點函數(shù)之@annotation()用法

    Spring-AOP @AspectJ切點函數(shù)之@annotation()用法

    這篇文章主要介紹了Spring-AOP @AspectJ切點函數(shù)之@annotation()用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • MybatisPlus調(diào)用原生SQL的三種方法實例詳解

    MybatisPlus調(diào)用原生SQL的三種方法實例詳解

    這篇文章主要介紹了MybatisPlus調(diào)用原生SQL的三種方法,在有些情況下需要用到MybatisPlus查詢原生SQL,MybatisPlus其實帶有運行原生SQL的方法,我這里列舉三種,需要的朋友可以參考下
    2022-09-09

最新評論