2009-06-12 8 views
0

NetBeansプラットフォームでモジュールを作成する場合、FileObjectオブジェクトは、IDEの仮想ファイルシステム内のファイルを表します。新しいFileObjectの作成は簡単ですが、NetBeansは実際のFileへの参照を完全に制御していますか、自分自身でFileObjectを閉じるべきですか? 、上記のコードで作成後にOpenIDE 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を取得しなければならないし、それを手動で閉じます。私のコードは次のようなものですか?

ありがとうございました。

答えて

1

NetBeans APIとソースコードを掘り下げた後、自分の質問に対する答えが見つかったと思います。

上記の属性は、特殊属性ファイルに格納されます。仮想ファイルシステム内の各フォルダは、FileObjectのために格納された属性を含む隠し属性ファイル(.nbattrs)を持っています。

<?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ではなく単なる属性にコンテンツを追加したい場合は、あなたがそれをFileObjectInputStreamOutputStreamを使用しての通常の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);    
} 
関連する問題