精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-04-01
转自 开发者的天空
Path file = ...; BasicFileAttributes attr = Attributes.readBasicFileAttributes(file); if (attr.creationTime() != null) { System.out.println("creationTime: " + attr.creationTime()); } if (attr.lastAccessTime() != null) { System.out.println("lastAccessTime: " + attr.lastAccessTime()); } if (attr.lastModifiedTime() != null) { System.out.println("lastModifiedTime: " + attr.lastModifiedTime()); } System.out.println("isDirectory: " + attr.isDirectory()); System.out.println("isOther: " + attr.isOther()); System.out.println("isRegularFile: " + attr.isRegularFile()); System.out.println("isSymbolicLink: " + attr.isSymbolicLink()); System.out.println("size: " + attr.size()); 下面的例子中,我们检查了对一个文件的访问权限,判断该文件是常规的文件还是目录: import static java.nio.file.AccessMode.*; Path file = ...; boolean error=false; try { file.checkAccess(READ, EXECUTE); if (!Attributes.readBasicFileAttributes(file).isRegularFile()) { error = true; } } catch (IOException x) { //Logic for error condition... error = true; } if (error) { //Logic for failure... return; } //Logic for executable file... 设置时间戳
Path file = ...; BasicFileAttributes attr = Attributes.readBasicFileAttributes(file); long currentTime = System.currentTimeMillis(); if (attr.lastModifiedTime() != null) { FileTime ft = FileTime.fromMillis(currentTime); Attributes.setLastModifiedTime(file, ft); } else { System.err.println("lastModifiedTime time stamp not supported"); }
DOS的文件属性
Path file = ...; try { DosFileAttributes attr = Attributes.readDosFileAttributes(file); System.out.println("isReadOnly is " + attr.isReadOnly()); System.out.println("isHidden is " + attr.isHidden()); System.out.println("isArchive is " + attr.isArchive()); System.out.println("isSystem is " + attr.isSystem()); } catch (IOException x) { System.err.println("DOS file attributes not supported:" + x); } 我们可以使用setAttribute方法来设置DOS文件属性,如: Path file = ...; Attributes.setAttribute(file, "dos:hidden", true); 要注意的是,不是只有DOS操作系统才支持DOS文件属性,有些操作系统如Samba也支持DOS文件属性。 Path file = ...; PosixFileAttributes attr = Attributes.readPosixFileAttributes(file); System.out.format("%s %s %s%n", attr.owner().getName, attr.group().getName(), PosixFilePermissions.toString(attr.permissions())); 下面的代码读取了一个文件的属性,然后创建了一个新的文件,将原有的文件的权限属性赋予新创建的文件: Path sourceFile = ...; Path newFile = ...; PosixFileAttributes attrs = Attributes.readPosixFileAttributes(sourceFile); FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute(attrs.permissions()); try { file.createFile(attr); } catch (IOException x) { //unable to create the file } 上面的代码中我们使用了PosixFilePermission类,该类是一个帮助类,提供了一些方法来读取和生成文件权限,这里就不详细解释了。 Path file = ...; Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rw-------"); FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute(perms); try { Attributes.setPosixFilePermissions(file, perms); } catch (IOException x) { System.err.println(x); } 文件有所有者的属性和所属组的属性,在设置这些属性的时候,我们需要传入一个UserPrincipal对象作为参数,我们可以使用 UserPrincipalLookupService来根据用户名或组名来创建该对象。UserPrincipalLookupService实例可以 通过FileSystem.getUserPrincipalLookupService方法获得。下面就是设置所有者属性的例子: Path file = ...; try { UserPrincipal owner = file.GetFileSystem().getUserPrincipalLookupService() .lookupPrincipalByName("sally"); Attributes.setOwner(file, owner); } catch (IOException x) { System.err.println(x); } Attributes类没有提供设置所属组的方法,如果要设置所属组,需要调用POSIX文件属性视图来进行,下面是示例代码: Path file = ...; try { GroupPrincipal group = file.getFileSystem().getUserPrincipalLookupService() .lookupPrincipalByGroupName("green"); file.getFileAttributeView(PosixFileAttributeView.class).setGroup(group); } catch (IOException x) { System.err.println(x); } 用户定义的文件属性
Path file = ...; UserDefinedFileAttributeView view = file .getFileAttributeView(UserDefinedFileAttributeView.class); view.write("user.mimetype", Charset.defaultCharset().encode("text/html"); 要读取MIME类型属性,要使用以下的代码: Path file = ...; UserDefinedFileAttributeView view = file .getFileAttributeView(UserDefinedFileAttributeView.class); String name = "user.mimetype"; ByteBuffer buf = ByteBuffer.allocate(view.size(name)); view.read(name, buf); buf.flip(); String value = Charset.defaultCharset().decode(buf).toString(); 如果文件系统不支持扩展属性,那么会抛出一个UnsupportedOperationException异常,你可以咨询系统管理员来确认系统是否支持
文件的扩展属性并进行相应的配置。 Path file = ...; FileStore store = file.getFileStore(); FileStoreSpaceAttributes attr = Attributes.readFileStoreSpaceAttributes(store); System.out.println("total: " + attr.totalSpace() ); System.out.println("used: " + (attr.totalSpace() - attr.unallocatedSpace()) ); System.out.println("avail: " + attr.usableSpace() ); 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 2129 次