private static void makeWritable(@Nonnull Path path) throws IOException { if (!Functions.isWindows()) { try { PosixFileAttributes attrs = Files.readAttributes(path, PosixFileAttributes.class); Set<PosixFilePermission> newPermissions = attrs.permissions(); newPermissions.add(PosixFilePermission.OWNER_WRITE); Files.setPosixFilePermissions(path, newPermissions); } catch (NoSuchFileException ignored) { return; } catch (UnsupportedOperationException ignored) { // PosixFileAttributes not supported, fall back to old IO. } } /* * We intentionally do not check the return code of setWritable, because if it * is false we prefer to rethrow the exception thrown by Files.deleteIfExists, * which will have a more useful message than something we make up here. */ path.toFile().setWritable(true); }
/** * Gets local file's permission mode. * * @param filePath the file path * @return the file mode in short, e.g. 0777 */ public static short getLocalFileMode(String filePath) throws IOException { Set<PosixFilePermission> permission = Files.readAttributes(Paths.get(filePath), PosixFileAttributes.class).permissions(); return translatePosixPermissionToMode(permission); }
@Override public UfsFileStatus getFileStatus(String path) throws IOException { String tpath = stripPath(path); File file = new File(tpath); PosixFileAttributes attr = Files.readAttributes(Paths.get(file.getPath()), PosixFileAttributes.class); String contentHash = UnderFileSystemUtils.approximateContentHash(file.length(), file.lastModified()); return new UfsFileStatus(path, contentHash, file.length(), file.lastModified(), attr.owner().getName(), attr.group().getName(), FileUtils.translatePosixPermissionToMode(attr.permissions())); }
@Override public UfsDirectoryStatus getDirectoryStatus(String path) throws IOException { String tpath = stripPath(path); File file = new File(tpath); PosixFileAttributes attr = Files.readAttributes(Paths.get(file.getPath()), PosixFileAttributes.class); return new UfsDirectoryStatus(path, attr.owner().getName(), attr.group().getName(), FileUtils.translatePosixPermissionToMode(attr.permissions()), file.lastModified()); }
private static int getPosixFileMode(Path file) throws IOException { final PosixFileAttributes attr = Files.readAttributes(file, PosixFileAttributes.class); final Set<PosixFilePermission> perm = attr.permissions(); // retain permissions, note these values are octal //noinspection OctalInteger int mode = 0100000; //noinspection OctalInteger mode += 0100 * getModeFromPermissions( perm.contains(PosixFilePermission.OWNER_READ), perm.contains(PosixFilePermission.OWNER_WRITE), perm.contains(PosixFilePermission.OWNER_EXECUTE)); //noinspection OctalInteger mode += 010 * getModeFromPermissions( perm.contains(PosixFilePermission.GROUP_READ), perm.contains(PosixFilePermission.GROUP_WRITE), perm.contains(PosixFilePermission.GROUP_EXECUTE)); mode += getModeFromPermissions( perm.contains(PosixFilePermission.OTHERS_READ), perm.contains(PosixFilePermission.OTHERS_WRITE), perm.contains(PosixFilePermission.OTHERS_EXECUTE)); return mode; }
@Override public UfsStatus getStatus(String path) throws IOException { String tpath = stripPath(path); File file = new File(tpath); PosixFileAttributes attr = Files.readAttributes(Paths.get(file.getPath()), PosixFileAttributes.class); if (file.isFile()) { // Return file status. String contentHash = UnderFileSystemUtils.approximateContentHash(file.length(), file.lastModified()); return new UfsFileStatus(path, contentHash, file.length(), file.lastModified(), attr.owner().getName(), attr.group().getName(), FileUtils.translatePosixPermissionToMode(attr.permissions())); } // Return directory status. return new UfsDirectoryStatus(path, attr.owner().getName(), attr.group().getName(), FileUtils.translatePosixPermissionToMode(attr.permissions()), file.lastModified()); }
@Override public UfsStatus[] listStatus(String path) throws IOException { path = stripPath(path); File file = new File(path); File[] files = file.listFiles(); if (files != null) { UfsStatus[] rtn = new UfsStatus[files.length]; int i = 0; for (File f : files) { // TODO(adit): do we need extra call for attributes? PosixFileAttributes attr = Files.readAttributes(Paths.get(f.getPath()), PosixFileAttributes.class); short mode = FileUtils.translatePosixPermissionToMode(attr.permissions()); UfsStatus retStatus; if (f.isDirectory()) { retStatus = new UfsDirectoryStatus(f.getName(), attr.owner().getName(), attr.group().getName(), mode, f.lastModified()); } else { String contentHash = UnderFileSystemUtils.approximateContentHash(f.length(), f.lastModified()); retStatus = new UfsFileStatus(f.getName(), contentHash, f.length(), f.lastModified(), attr.owner().getName(), attr.group().getName(), mode); } rtn[i++] = retStatus; } return rtn; } else { return null; } }
/** * Convert POSIX attributes to property map. * * @param attrs Attributes view. * @return IGFS properties map. */ public static Map<String, String> posixAttributesToMap(PosixFileAttributes attrs) { if (attrs == null) return null; Map<String, String> props = U.newHashMap(3); props.put(IgfsUtils.PROP_USER_NAME, attrs.owner().getName()); props.put(IgfsUtils.PROP_GROUP_NAME, attrs.group().getName()); int perm = 0; for(PosixFilePermission p : attrs.permissions()) perm |= (1 << 8 - p.ordinal()); props.put(IgfsUtils.PROP_PERMISSION, '0' + Integer.toOctalString(perm)); return props; }
try { PosixFileAttributeView view = Files.getFileAttributeView(file, PosixFileAttributeView.class); attributes.put(FILE_PERMISSIONS_ATTRIBUTE, PosixFilePermissions.toString(view.readAttributes().permissions())); attributes.put(FILE_GROUP_ATTRIBUTE, view.readAttributes().group().getName()); } catch (Exception ignore) {
try { PosixFileAttributeView view = Files.getFileAttributeView(filePath, PosixFileAttributeView.class); attributes.put(FILE_PERMISSIONS_ATTRIBUTE, PosixFilePermissions.toString(view.readAttributes().permissions())); attributes.put(FILE_GROUP_ATTRIBUTE, view.readAttributes().group().getName()); } catch (Exception ignore) {
Files.getFileAttributeView(p, PosixFileAttributeView.class); if (view != null) { return view.readAttributes().permissions(); } else if (posixNotSupportedFallback != null) { return posixNotSupportedFallback.apply(p);
fileProperties.posixPermissions = PosixFilePermissions.toString(posixAttrs.permissions());
/** {@inheritDoc} */ @Override public String permissions(String path) throws IOException { Path p = path(path); PosixFileAttributeView attrView = Files.getFileAttributeView(p, PosixFileAttributeView.class); if (attrView == null) throw new UnsupportedOperationException("Posix file attributes not available"); int perm = 0; for(PosixFilePermission pfp : attrView.readAttributes().permissions()) perm |= (1 << 8 - pfp.ordinal()); return '0' + Integer.toOctalString(perm); }
/** * 设置文件权限。前提:必须支持PosixFileAttributeView. */ public static void setFilePerm(File file, String perm) { if (filePermSupported()) { try { Set<PosixFilePermission> perms = PosixFilePermissions.fromString(perm); PosixFileAttributes attr = Files.readAttributes(file.toPath(), PosixFileAttributes.class); attr.permissions().clear(); Files.setPosixFilePermissions(file.toPath(), perms); } catch (IOException e) { throw new IllegalStateException(e); } } }
final Path path = Paths.get(file.getAbsolutePath()); PosixFileAttributes attrs = Files.getFileAttributeView(path, PosixFileAttributeView.class).readAttributes(); Set<PosixFilePermission> permissions = attrs.permissions(); int user = toOctalPermission( permissions.contains(PosixFilePermission.OWNER_READ),
true, // readAttributes.permissions().contains( PosixFilePermission.OWNER_EXECUTE), readAttributes.isSymbolicLink(),
@Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { setPosixFileAttributes(dir, parentDirAttributes.owner(), parentDirAttributes.group(), parentDirAttributes.permissions()); return FileVisitResult.CONTINUE; } });
private static List<FileAttribute<Set<PosixFilePermission>>> getPosixAttributes(Path file) throws IOException { if (Files.exists(file) && supportsFileOwnerAttributeView(file, PosixFileAttributeView.class)) { PosixFileAttributeView posixView = Files.getFileAttributeView(file, PosixFileAttributeView.class); if (posixView != null) { return Collections.singletonList(PosixFilePermissions.asFileAttribute(posixView.readAttributes().permissions())); } } return Collections.emptyList(); }
public static int getFilePermissions(String path) throws IOException { File f = new File(path); Path p = f.toPath(); PosixFileAttributeView view = Files.getFileAttributeView(p, PosixFileAttributeView.class); PosixFileAttributes attrs1 = view.readAttributes(); String mode = PosixFilePermissions.toString(attrs1.permissions()); String mm = parseFilePermissions(mode.substring(0, 3)) + "" + parseFilePermissions(mode.substring(3, 6)) + "" + parseFilePermissions(mode.substring(6, 9)); return Integer.parseInt(mm); }
public PosixPermissionsResetter(Path path) throws IOException { attributeView = Files.getFileAttributeView(path, PosixFileAttributeView.class); Assert.assertNotNull(attributeView); permissions = attributeView.readAttributes().permissions(); } @Override