0

私がやっていることは、htmlファイルを読んでいて、テキストを入力するためにhtml内の特定の場所を探していることです。したがって、 bufferedreader を使用して html ファイルを読み取り、タグで分割しています。この前にテキストを入力したいのですが、その方法がわかりません。html は ...(newText)(/HEAD) の行に沿って表示されます (角かっこの丸い頭は角かっこを意味します。挿入方法がわかりません)

同じファイルに PrintWriter が必要ですか? もしそうなら、正しい場所に書き込むようにどのように指示しますか? このようなことを行うのにどの方法が最も効率的かはわかりません。助けてください。

前もって感謝します。


ここに私のJavaコードの一部があります:

        File f = new File("newFile.html");
        FileOutputStream fos = new FileOutputStream(f);
        PrintWriter pw = new PrintWriter(fos);


        BufferedReader read = new BufferedReader(new FileReader("file.html"));
        String str;
        int i=0;
        boolean found = false;
        while((str= read.readLine()) != null)
        {

            String[] data = str.split("</HEAD>");


            if(found == false)
            {
                pw.write(data[0]);
                System.out.println(data[0]);
                pw.write("</script>");
                found = true;
            }
            if(i < 1)
            {
            pw.write(data[1]);
            System.out.println(data[1]);
            i++;
            }
            pw.write(str);
            System.out.println(str);


        }
      }
      catch (Exception e) {
        e.printStackTrace( );
        }

これを行うと、ファイル内のポイントに到達し、次のエラーが発生します。

致命的なエラー: MERLIN: EDG API に接続できません。

.edg_properties ファイルが見つかりません。

java.lang.OutOfMemoryError: 新しいネイティブ スレッドを作成できません。

テーブルを切り捨てられません。

例外: サーバーへの接続を開けません: SQLExceptionio,

キャッチされた IOException: java.io.IOException: JZ0C0: 接続は既に閉じられています...

なぜこれらを取得するのか、またはこれらすべてが何を意味するのかわかりませんか?

助けてください。

4

5 に答える 5

4

とても簡単なはずです:

  • ファイルを文字列に読み込む
  • 前/後のチャンクに分割
  • 書き込み用の一時ファイルを開く
  • チャンクの前にテキストを書き、チャンクの後に書きます
  • クローズアップし、一時ファイルを元に移動します

特に最後の数ステップについて疑問に思っているようです。重要なコードは次のとおりです。

File htmlFile = ...;
...
File tempFile = File.createTempFile("foo", ".html");
FileWriter writer = new FileWriter(tempFile);
writer.write(before);
writer.write(yourText);
writer.write(after);
writer.close();
tempFile.renameTo(htmlFile);
于 2009-09-10T08:44:37.880 に答える
1

フォーラムのスレッドには、その方法に関するいくつかのアイデアがあります。GL。

于 2009-09-10T08:49:23.957 に答える
1

ほとんどの人は、一時ファイルに書き込み、正常に完了したら一時ファイルを元のファイルにコピーすることを提案しています。

于 2009-09-10T08:21:56.880 に答える
0

読み取りと書き込みには、FileReaders/FileWriters または対応する IO ストリーム クラスを使用できます。

編集には、 HTML パーサーを使用してドキュメントを処理することをお勧めします。HTML ドキュメントを内部データ構造に読み込むことができるため、コンテンツを検索して変更を適用する作業が簡素化されます。(ほとんど?) パーサーはドキュメントを HTML に再度シリアル化できます。

少なくとも、HTML 文書の構造を壊すことはありません。

于 2009-09-10T08:58:13.203 に答える
0

編集中のエラーのリストをフォローアップすると、その多くは OutOfMemoryError に起因する可能性があります。つまり、JVM のメモリが不足しているため、Java はオブジェクトを割り当てることができませんでした。これは、アプリケーションのメモリ リークが原因である可能性があります。または、単に、実行しようとしている作業が、割り当てたよりも多くのメモリを一時的に必要としている可能性があります。

java実行可能ファイルにXmx 引数を指定することで、JVM が起動するメモリの量を増やすことができます。次に例を示します。

-Xmx1024m

最大ヒープ サイズを 1024 メガバイトに設定します。

これにより、他の問題が発生する可能性があります。オブジェクトを確実に作成または変更できない場合、多くの奇妙なことが起こりがちです。そうは言っても、行動を起こすことができるように見えることがいくつかあります。特に、MERLIN が何であれ、EDG のプロパティ ファイルが必要であり、検索している場所で見つけることができないため、機能していないように見えます。おそらく、設定ファイルをそこに置くか、別の場所を見るように指示する必要があります。

他の IOExceptions は、一目瞭然です。プログラムは、SQLException が原因でサーバーへの接続を確立できませんでした (基になる例外自体は、おそらくログに記録されています)。プログラムの他の部分が、閉じた接続を使用してリモート マシンと通信しようとしました。

最初にプロパティ ファイル (問題のないエラーでない場合) とメモリの問題を修正してから、残りの問題が引き続き発生するかどうかを確認します。

于 2009-09-10T09:18:09.117 に答える