From 6a93fb64868f4ca86203b64da1bddce1c1c1b3c1 Mon Sep 17 00:00:00 2001 From: fjn <1194361820@qq.com> Date: Fri, 19 Feb 2021 21:06:05 +0800 Subject: [PATCH] =?UTF-8?q?*=20=E6=94=AF=E6=8C=81=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jn/langx/util/io/file/FilePermission.java | 118 ++++++++++++++++++ .../com/jn/langx/util/io/file/Filenames.java | 5 + 2 files changed, 123 insertions(+) create mode 100644 langx-java/src/main/java/com/jn/langx/util/io/file/FilePermission.java diff --git a/langx-java/src/main/java/com/jn/langx/util/io/file/FilePermission.java b/langx-java/src/main/java/com/jn/langx/util/io/file/FilePermission.java new file mode 100644 index 000000000..e7ea9ebf1 --- /dev/null +++ b/langx-java/src/main/java/com/jn/langx/util/io/file/FilePermission.java @@ -0,0 +1,118 @@ +package com.jn.langx.util.io.file; + + +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; + +public enum FilePermission { + + /*** + * user group other + * RWX RWX RWX + * 二进制 110 100 100 + * + * 以0开始的数字,代表了是 8进制的。 + * 以 0x 开始的数字,代表是 16进制的 + */ + + /** + * read permission, owner + */ + USR_R(00400), + /** + * write permission, owner + */ + USR_W(00200), + /** + * execute/search permission, owner + */ + USR_X(00100), + /** + * read permission, group + */ + GRP_R(00040), + /** + * write permission, group + */ + GRP_W(00020), + /** + * execute/search permission, group + */ + GRP_X(00010), + /** + * read permission, others + */ + OTH_R(00004), + /** + * write permission, others + */ + OTH_W(00002), + /** + * execute/search permission, group + */ + OTH_X(00001), + /** + * set-user-ID on execution + */ + SUID(04000), + /** + * set-group-ID on execution + */ + SGID(02000), + /** + * on directories, restricted deletion flag + */ + STICKY(01000), + // Composite: + /** + * read, write, execute/search by user + */ + USR_RWX(USR_R, USR_W, USR_X), + /** + * read, write, execute/search by group + */ + GRP_RWX(GRP_R, GRP_W, GRP_X), + /** + * read, write, execute/search by other + */ + OTH_RWX(OTH_R, OTH_W, OTH_X); + + private final int val; + + FilePermission(int val) { + this.val = val; + } + + FilePermission(FilePermission... perms) { + int val = 0; + for (FilePermission perm : perms) { + val |= perm.val; + } + this.val = val; + } + + public boolean isIn(int mask) { + return (mask & val) == val; + } + + public static Set fromMask(int mask) { + final List perms = new LinkedList(); + for (FilePermission p : FilePermission.values()) { + if (p.isIn(mask)) { + perms.add(p); + } + } + return new HashSet(perms); + } + + public static int toMask(Set perms) { + int mask = 0; + for (FilePermission p : perms) { + mask |= p.val; + } + return mask; + } + +} \ No newline at end of file diff --git a/langx-java/src/main/java/com/jn/langx/util/io/file/Filenames.java b/langx-java/src/main/java/com/jn/langx/util/io/file/Filenames.java index 81b5789f0..87b1d63e3 100644 --- a/langx-java/src/main/java/com/jn/langx/util/io/file/Filenames.java +++ b/langx-java/src/main/java/com/jn/langx/util/io/file/Filenames.java @@ -130,6 +130,11 @@ public static String asUnixFilePath(String filePath) { return filePath.trim().replaceAll("\\\\", "/").replaceAll("/+", "/"); } + public static String getParentPath(String filepath){ + String filename = extractFilename(filepath); + return filepath.substring(0,filepath.length() - filename.length()); + } + public static String extractFilename(String filePath) { return extractFilename(filePath, true); }