javase获取项目根目录
在上一篇文章“确定特定文件系统支持的视图”中 ,了解如何询问文件系统存储,并了解特定文件属性视图的可支持性。
简而言之,我们将探索最高级和最重要的文件属性视图之一,即用户定义的文件属性视图 。
特别是,在系统之间进行集成期间,我在交换文件中经常使用此功能,以便从用户和文件内容中隐藏文件元数据和与安全性有关的信息。 因此,文件内容将仅与文件的内容有关,而不再是无关的元数据 。
因此,如果发现没有足够的内置属性来满足需要,或者如果您要与文件关联某些唯一的元数据( 对文件系统有意义 ),则可以定义自己的属性。
NIO.2提供了用户定义的文件属性视图,并通过UserDefinedFileAttributeView
接口扩展了属性。 利用此功能,您可以将对您的用例有用的任何属性关联到文件。
在这里,您应该知道如何:
- 检查用户定义的属性可支持性
- 用户定义属性的操作如下:
- 定义用户属性。
- 列出用户定义的属性名称和值大小。
- 获取用户定义的属性的值。
- 删除文件的用户定义属性。
这是先前定义的操作的类,您还需要使用JDK 7+:
import static java.lang.System.err;
import static java.lang.System.out;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import static java.nio.file.Files.getFileStore;
import java.nio.file.Path;
import static java.nio.file.Paths.get;
import java.nio.file.attribute.UserDefinedFileAttributeView;
/**
* GET/SET FILES METADATA THROUGH THE NEW JAVA.NIO.FILE.ATTRIBUTE API.
*
* @author mohamed_taman
*
* @see java.nio.file.attribute
* @see java.nio.file.Files
*/
public class MetadataOperations {
private static FileSystem fs = FileSystems.getDefault();
private static Path path = get("C:", "workspace/NIO2", "resources", "TOC.txt");
public static void main(String... args) {
//User-Defined File Attributes View |
userDefinedViewsOperations();
}
private static void userDefinedViewsOperations() {
try {
// Check User-Defined Attributes Supportability
if (getFileStore(path)
.supportsFileAttributeView(UserDefinedFileAttributeView.class)) {
// 1- Define a User Attribute.
UserDefinedFileAttributeView udfav = Files.getFileAttributeView(path,
UserDefinedFileAttributeView.class);
out.println("Attrs. before deletion. its size: " + udfav.list().size());
for (String name : udfav.list()) {
out.println(udfav.size(name) + " " + name);
}
int written = udfav.write("file.description", Charset.defaultCharset().
encode("This file contains private information about HOL2846!"));
// 2- List User-Defined Attribute Names and Value Sizes.
for (String name : udfav.list()) {
out.println(udfav.size(name) + " " + name);
}
// 3- Get the Value of a User-Defined Attribute.
int size = udfav.size("file.description");
ByteBuffer bb = ByteBuffer.allocateDirect(size);
udfav.read("file.description", bb);
bb.flip();
out.println(Charset.defaultCharset().decode(bb).toString());
/**
* Note: Using the UserDefinedFileAttributeView.size() method,
* you can easily set the correct size of the buffer that represents
* the value of the user-defined attribute.
*
* Note: You can also read an attribute by using the getAttribute() method.
* The value is returned as byte array (byte[]).
*
*/
// 4- Delete a File’s User-Defined Attribute.
out.println("Attrs. before deletion.");
for (String name : udfav.list()) {
out.println(udfav.size(name) + " " + name);
}
udfav.delete("file.description");
out.println("Attrs. after deletion.");
for (String name : udfav.list()) {
out.println(udfav.size(name) + " " + name);
}
} else {
out.println(path.toAbsolutePath().toString() +
", Doesn't support user defined attributes.");
}
} catch (Exception e) {
err.println(e);
}
}
}
资源资源
javase获取项目根目录