0

NetBeansプラットフォームでモジュールを作成する場合、FileObjectオブジェクトはIDEの仮想ファイルシステム内のファイルを表します。新しいFileObjectsの作成は簡単ですが、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);            
} 

上記のコードで、実際のファイルへの参照をいくつか開いたままにしますか、それとものを取得しOutputStreamFileObject手動で閉じる必要がありますか?

ありがとう。

4

1 に答える 1

1

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ただし、単なる属性ではなく、にコンテンツを追加する場合は、 InputStreamand OutputStreamof FileObject(getterとsetterの両方があります)を使用する通常のJavaの方法でそれを実行し、それに応じてストリームを閉じることを忘れないでください。例えば

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);            
}
于 2009-06-12T18:48:41.927 に答える