• ベストアンサー

ファイルの解放

今、読込んだファイルについて処理を行ったのち、削除する処理を作ろうと思うのですが、ファイルを削除できません。 C言語でのfcloseのような処理は、Documentにあるのでしょうか? 読込みは以下の通りです document doc = db.parse(new File(data.xml)) すいませんが、よろしくお願いします。

  • Java
  • 回答数3
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • m_hagizo
  • ベストアンサー率65% (31/47)
回答No.2

#1で回答した者です。 >fclose的なメソッドっていうのは存在するのでしょうか? とのことですが、これはFileInputStreamクラスのclose()メソッドが、それに近いものと言えるでしょう。 注:これ以降は、あまり自信がない情報です・・・。 DocumentBuilderのparseメソッドは、引数にInputStreamを指定するものもあったと思います。これを使って、FileからFileInputStreamを作って、それをDocumentBuilderに渡して・・・とかなんとかすれば、ちゃんとファイルをクローズして・・・とかを意識できるかもしれません。要するに、Fileオブジェクトを渡してしまえば、その辺は意識しなくてもDocumentBuilderがやってくれますよ、という仕組みになっているのではないでしょうか・・。(間違っていたら、どなたかご指摘お願いします。)

wwwwtaka
質問者

お礼

返事が遅れすいませんでしたが、ありがとうございました。 確かに、動作を見ると、自動的にDocumentBuilderがやっているような気がします。 わからないことが多く、四苦八苦してますが、頑張って勉強したいと思います。 ありがとうございました。

その他の回答 (2)

  • aton
  • ベストアンサー率47% (160/334)
回答No.3

No.2のm_hagizoさんのお考えでだいたいあってると思います。 ソースにあたったわけではないので,私も想像に過ぎませんが,DocumentBuilder#parse(File f) の実装は,たぶん FileInputStream fis = new FileInputStream(f); this.parse(fis); fis.close(); のように,内部でDocumentBuilder#parse(FileInputStream is)を利用して作られているのだと思います。 興味があれば,御自分でソースに当たって確認されるとよいと思います。

  • m_hagizo
  • ベストアンサー率65% (31/47)
回答No.1

ご質問のところにあるdbって、DocumentBuilderクラスのオブジェクトですよね? で、fcloseとは違うんですが、Fileのdeleteメソッドを使って、こんな感じにしてしまうのはいかがでしょうか・・・。 File file = new File("data.xml"); Document doc = db.parse(file);    : <ドキュメントの処理>    : file.delete(); // このファイルを削除するというメソッド。 他にもいろいろやり方があると思いますが、これが一番簡単だと思われます。

wwwwtaka
質問者

お礼

どうもありがとうございます!! 削除はこんな間単にできるんですね。 fclose的なメソッドっていうのは存在するのでしょうか? それとも、読込みが終わった時点で、アクセスは完了したと 考えることはできるんでしょうか?

関連するQ&A

  • REXMLについて教えてください

    XML文書を処理するプログラムを作っています。 http://japan.internet.com/developer/20070703/27.htmlを参考にして作り始めましたが、 require "rexml/document" include REXML file_name = SWin::CommonDialog::openFilename(nil, ["*.xml","*.xml"], 0x1000, "ファイル選択") doc = Document.new File.new(file_name) p doc としても、 <UNDEFINED> ... </> と表示されるだけです。 私の想定では、XML文全体が表示されると思ったのですが、これでも正常に動作しているのでしょうか? 普通のテキストファイルとして読み込めば、正常に画面に表示できます。 環境はRuby1.8.7 + RDE です。

    • ベストアンサー
    • Ruby
  • REXMLについて教えてください3

    def func(doc) doc.sub!("XXX","YYY") return doc end doc = Document.new File.new(file_name) ... new_doc = func(doc) ... というようにREXMLで処理し、さらにそれをsub!コマンドで処理するプログラムを考えています。 ところが、データの形式が合わないためだと思うのですが、 Document (NoMethodError) というエラーが出ます。 形式を変換するコマンドはないのでしょうか?

  • XMLの処理について

    javaでxmlをsoapで投げる処理をしています。 <クライアント> DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = dbf.newDocumentBuilder(); Document doc = builder.parse( new File( "test.xml" ) ); Element elm = doc.getDocumentElement(); result = WebService( elm ); <サーバ> public Object WebService( Element elm ) { return 'elmを処理した結果'; } このクライアントの処理をperlで行いたいのですが、可能でしょうか?  : $service = SOAP::Lite->Service( "xxx.wdsl" ); open( XML, "test.xml" ); @xml = <XML>; ?? ここの処理はどうすれば ?? result = $service.WebService( @xml );  :

  • Java ファイルオブジェクトでなく文字列オブジェクト?

    JavaでXMLをパースするプログラムを初めて試しています。 parseメソッドの第一引数がファイルオブジェクトなのですが、これをメモリ(文字列)オブジェクトを与えて同じ動作させるものはあるのでしょうか? // SAXパーサーファクトリを生成 SAXParserFactory spfactory = SAXParserFactory.newInstance(); // SAXパーサーを生成 SAXParser parser = spfactory.newSAXParser(); // XMLファイルを指定されたデフォルトハンドラーで処理します parser.parse(new File("helloworld.xml"), new InsXMLParser()); ※このように String str = "<xml? ......"; parser.XXXXXX(str, new InsXMLParser

    • ベストアンサー
    • XML
  • XMLの読み込み

    DocumentBuilderFactory,DocumentBuilder等を使って XMLドキュメントの読み込みを行っています。 例えば、以下の様なXMLドキュメントがあった時 <text>内の読み込みを行うと、テキストテキスト2と なってしまいます。 「テキスト<p/><p/>テキスト2」として取得したいのですが 何かいい方法ないでしょうか? ----------------------------------------- <?xml version="1.0" encoding="Shift_JIS"?> <root> <text> テキスト<p/><p/>テキスト2</text> </root> ----------------------------------------- それとも、XMLドキュメント上、「<p/>」に意味があるのでしょうか? ※プログラム一部抜粋 //-- DOMオブジェクト初期化 DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); //-- XMLファイル読み込み this.doc = docBuilder.parse(new File(strPath)); this.doc.getDocumentElement().normalize();

    • ベストアンサー
    • Java
  • XMLファイルの読込み方法についての質問

    こんにちは、mako-kwnshと申します。 あるXMLを読み込んで指定したノード内 のデータを取り込んだ後、 指定したノードをnode型のデータに 代入したいのですが、 やり方がいまいちわかりません。 DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = builder.parse("c:\\Scenario\\test1.xml"); Element xmlroot = doc.getDocumentElement(); //String first = xmlroot.getNodeName(); // EMSData d3aData = new EMSData(att); // System.out.println("ddd" + d3aData.getValue(D3aCommonInfoPath.SYSTEM_KIND)); // System.out.println("ddd" + xmlroot);

    • ベストアンサー
    • Java
  • RSSからblogデータの抽出(プログラムにURLを記述して)

    先日、RSSからblogデータの抽出(直接URLを入力して)の質問をしたものです。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1719152 前回の質問では、参考サイトの(http://www.hellohiro.com/xmldom.htm) HelloWorldDOMPageList.javaを参考にして作った RSSからブログのデータを取得するプログラムでは、 // パースを実行してDocumentオブジェクトを取得 Document doc = builder.parse(new File("site.xml")); // ルート要素を取得(タグ名:site) Element root = doc.getDocumentElement(); System.out.println("ルート要素のタグ名:" + root.getTagName()); … のように、RSSからblog(ブログ)のタイトル・リンク・本文を抽出する際に、 対象となるRSSを一度、site.xmlなどにXML形式で保存して、 そのファイルに対してプログラムを実行していたので、 これを、プログラム実行時にRSSのURLを直接入力するようにして、プログラムを実行する方法を教えていただきました。 今回の質問は、プログラム実行時にURLを入力するのではなく、 プログラム中にRSSのURLを記述してプログラムを実行させたいです。例えば、 Document doc = builder.parse(new File("site.xml")); の部分を以下のような感じにして、RSSのURLに直接パースを実行して、 Documentオブジェクトを取得させたいです。 Document doc = "http://blog.livedoor.jp/example/index.rdf"; ただ、上記の書き方では当然プログラムが動かないので、 どのようにプログラムを書けばいいのか教えていただきたいです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • javaScriptからxmlファイルを読み込みたい。

    strutsで開発を行ってるのですが、javaScriptからweb.xmlに設定してあるsession-timeoutの時間を取得したいのです。 javaScriptからxmlファイルをparseできるみたいで、ネットを参考に書いてみたのですが。うまく動きません・・・以下がソースです。 jsファイルをweb.xmlと同じ階層において試したのですが 、うまく読み込めていないようなのです。どなたかご教授お願いできないでしょうか? javaScriptからweb.xmlを読み込むことは不可能なのでしょうか? ちなみにブラウザはIE6.0以上限定です。 function readXML(){ xml_doc = new ActiveXObject("Microsoft.XMLDOM"); xml_doc.async = false; if(xml_doc.load("web.xml")){ alert("success!"); }else{ alert("error!"); } }

  • 2バイト文字を含むXMLファイルのパース

    こんばんわyukimura1024です。 JavaでXMLファイルを読み込み、それをもとに別のXMLファイルを作って出力するプログラムを作っています。 環境はWinXPsp2、JDK1.4.2_08でeclipseを使ってます。 現象なのですが、以下のようなソースでtest.xmlを読み込もうとすると、ファイル内に2バイト文字があるときだけ、 org.xml.sax.SAXParseException:文字変換エラー:"Uniconvertible UTF-8 character beginning with 0x83"(行番号が小さすぎる可能性があります) というエラーが出てしまいます。 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(new FileInputStream("test.xml")); //←ここでエラー ネットで調べて「ヘッダ部で指定したエンコーディング名と、実際のXMLファイルの文字コードが異なっていないかを確認してください。XMLファイルをシフトJISで保存しているのであれば、ヘッダ部には<?xml version="1.0" encoding="Shift_JIS"?>といった指定を行う必要があります。」というのを見つけて試してみましたがうまくいきません。 とにかく2バイト文字が含まれているとエラーが出てしまいます(TT このエラーが出ないようにするには、どうしたらよいででしょうか? ご存知の方、教えていただけると助かります!よろしくお願いします。

  • XMLファイルの読み方

    以下の様なXMLファイルがあるとします。 "groupノード(?)のアトリビュートであるgrpIDとnumStdGrpの値を取得したいです。 JavaでDOMパーサーを使うことに限定します。 <?xml version="1.0" encoding="UTF-8"?> <dataHeader <numStudent>150</numStudent> <dataMain <band name="B1"> <group grpID="1" numStdGrp="15"/> </band> <band name="B2"> <group grpID="2" numStdGrp="10"/> </band> </dataMain> </dataHeader> 自分では試して見たのは以下まで。 File fXmlFile = new File("C:\XMLファイル名"); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(fXmlFile); doc.getDocumentElement().normalize(); (1)numStudentとdataMainノードまでは簡単: 例) NodeList nListDM = doc.getElementsByTagName("dataMain"); 上記からnListDM.item(0)してノード取得できて、getNodeName()で名前表示する。 (2)bandノード(?)もgetElementsByTagNameで取れます。 NodeList nListBand = doc.getElementsByTagName("band"); このノードリストの長さは2です。それぞれ、アトリビュート「name」の値(B1, B2)は以下の様にして取れます。 Node nNodeBand = nListBand.item(0); Element bElement = (Element) nNodeBand; して、bElement.getAttribute("name")。 問題はこの以降。 初めに書きましたように、 groupノード(?)のアトリビュートであるgrpIDとnumStdGrpの値どうやって取得するのでしょうか? getElementsByTagName(group)はだめです。どのbandのgroupか、区別できないので。 Java+XMLに詳しい方、教えてください。 よろしくお願いします。

    • ベストアンサー
    • Java