gpt4 book ai didi

java - OpenIDE FileObject 创建后是否应该关闭?

转载 作者:行者123 更新时间:2023-12-01 16:11:40 24 4
gpt4 key购买 nike

在 NetBeans 平台上创建模块时,FileObject 对象表示 IDE 虚拟文件系统中的文件。创建新的 FileObject 很简单,但是 NetBeans 是否完全控制对实际 File 的引用,或者我应该自己关闭 FileObject 吗?我的代码是这样的:

FileObject appRoot = FileUtil.getConfigRoot().getFileObject("myapp");

try {
FileObject fo = servers.createData(filename);
fo.setAttribute("name", "a name");
fo.setAttribute("desc", "a description");
} catch (IOException ex) {
throws new FileCreationException("Could not create file " + filename, ex);
}

使用上面的代码,我是否应该保留对实际文件的一些引用,还是应该获取 FileObjectOutputStream 并手动关闭它?

谢谢。

最佳答案

深入研究 NetBeans API 和源代码后,我相信我已经找到了自己问题的答案。

上面设置的属性存储在一个特殊的属性文件中。虚拟文件系统中的每个文件夹都有一个隐藏属性文件 ( .nbattrs ),其中包含为每个 FileObject 存储的属性。 ,例如

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE attributes PUBLIC "-//NetBeans//DTD DefaultAttributes 1.0//EN"
"http://www.netbeans.org/dtds/attributes-1_0.dtd">
<attributes version="1.0">
<fileobject name="dk-i2m-netbeans-smtpdummyservice-mailserver-1244831819713">
<attr name="name" stringvalue="My test"/>
<attr name="desc" intvalue="Server for testing outgoing e-mails"/>
</fileobject>
</attributes>

此文件完全由 NetBeans 控制,无需打开或关闭输入/输出流。

但是,如果您想将内容添加到 FileObject而不仅仅是属性,您必须使用 InputStream 的正常 Java 方式来完成此操作。和OutputStream FileObject的(两者都有 getter 和 setter)并记住相应地关闭流。例如

FileObject appRoot = FileUtil.getConfigRoot().getFileObject("myapp");

try {
FileObject fo = servers.createData(filename);
fo.setAttribute("name", "a name");
fo.setAttribute("desc", "a description");

// Lock the FileObject before writing
FileLock lock;
try {
lock = fo.lock();
} catch (FileAlreadyLockedException ex) {
Exceptions.printStackTrace(ex);
return;
}

try {
OutputStream out = fo.getOutputStream(lock);
try {
// Write into the output stream
} finally {
// Remember to close the stream
out.close();
}
} finally {
lock.releaseLock();
}
} catch (IOException ex) {
throws new FileCreationException("Could not create file " + filename, ex);
}

关于java - OpenIDE FileObject 创建后是否应该关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/987298/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com