首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenIDE FileObject应该在创建后关闭吗?

OpenIDE FileObject应该在创建后关闭吗?
EN

Stack Overflow用户
提问于 2009-06-12 15:28:06
回答 1查看 392关注 0票数 0

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

代码语言:javascript
复制
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并手动关闭它?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-06-12 18:48:42

在深入研究了NetBeans应用程序接口和源代码之后,我相信我已经找到了我自己问题的答案。

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

代码语言:javascript
复制
<?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中添加内容,而不仅仅是属性,则必须以普通的Java方式使用InputStreamOutputStreamFileObject (两者都有getter和setter),并记住相应地关闭流。例如:

代码语言:javascript
复制
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);            
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/987298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档