2011-06-23 37 views
0

私は、HTMLの.htmlファイルとして出力する必要があるHTMLコードのチャンクを持っています。あらかじめ書かれたhtmlコードは、ページのヘッダーとテーブルです。データを生成して同じ.htmlファイルに出力する必要があります。 prinln()を行単位で行うよりも、htmlコードを印刷する方が簡単ですか?ありがとうjava出力htmlコードをファイル

+0

「hのチャンクtml "は今?それはファイルですか?その場合は、ファイルを開いてstdoutにコピーするだけです。 http://commons.apache.org/io/api-release/org/apache/commons/io/IOUtils.html#copy(java.io.InputStream,%20java.io.OutputStream) –

+0

を参照してくださいその出力は同じhtmlファイルに保存されます...それはあなたが消費する基本HTMLファイルを生成する別のソースを持っているということですか? – helios

+0

htmlのチャンクは実際には出力HTMLファイルのヘッダーであり、残りのファイルは別のソースファイル(プレーンテキスト)から生成されます。 私がする必要があるのは、ファイルのディレクトリをhtmlに変換することです。それぞれは、同じヘッダーを持ちます。だから私はファイルにhtmlコードの束を印刷する方法を知りたいのです – Lehan

答えて

0

HTMLコードを解析するためにいくつかのJavaライブラリを見ることができます。クイックGoogleの検索にはいくつかの利点があります。 HTMLを読み込んだ後、それらのクエリを使用して必要に応じてDOMを操作し、それを吐き出す。例: http://jsoup.org/

+1

OPが尋ねたものは実際にはありません... –

+0

私はOPを誤解しましたか? ファイルや文字列などに "あらかじめ書かれた" HTMLコードが保存されています。それをHTML解析ライブラリに読み込みます。次に、規定どおりに「いくつかのデータを生成する」。必要に応じてデータを注入します。ライブラリを使用して結果を出力します。 – tskuzzy

0

例えば、テンプレートエンジンMVEL2またはFreeMarkerを使用してみてください。どちらもWebフレームワーク外のスタンドアロンアプリケーションで使用できます。あなたは前もって時間を失いますが、長期的には時間を節約します。

0

JSP(Java Server Pages)では、いくつかのJavaコードが簡単に埋め込まれたHTMLファイルを記述できます。たとえば、

<html><head><title>Hi!</title></head><body> 
<% some java code here that outputs some stuff %> 
</body></html> 

エンタープライズJavaサーバーがインストールされている必要があります。しかし、これがWebサーバー上にある場合、それは持っていることは不合理ではないかもしれません。

通常のJavaで実行したい場合は、それが必要です。私はあなたがあなたが行ごとに出力することを意味する部分を完全に理解していません。

System.out.println("<html>"); 
System.out.println("<head><title>Hi!</title></head>"); 
System.out.println("<body>"); 
// etc 

このようなことをすることを意味しましたか?それがあなたが意味するものなら、それをしないでください。テンプレートファイルからデータを読み込むだけで、すべてのデータを一度に出力できます。それを複数行のテキスト文字列に読み込んで、テンプレートからデータを読み込み、新しいファイルに直接出力することができます。何かのように

while((strInput = templateFileReader.readLine()) != null) 
    newFileOutput.println(strInput); 

また、私はあなたがその部分の意味を正確には分かりません。

+0

あなたの2番目の提案は、HTMLコードがプログラムにハードコードされていることを除いて、私が意図したものです。私がする必要があるのは、ハードコードされたHTML(ヘッダー)を出力し、コマンドライン入力に基づいて残りのページを生成することです。私が書いているのは実際にはjavasプログラムです。混乱して申し訳ありません – Lehan

+0

プログラムにハードコードされていると言えば、それはStringや何かに格納されていると仮定しています。だから、あなたは 'newFileOutput.println(header);'を実行してから、ページの残りの部分を出力することができませんでしたか? – tskuzzy

+0

それは私が現在やっていることですが、それだけではすべての行を入力するのが本当に遅いです...もっと速い方法があるのだろうかと思っています – Lehan

0

HTMLは単にテキストをマークする方法なので、HTMLファイルを書き込むには、HTMLを.html拡張子のファイルにテキストとして書き込むだけです。

ディレクトリからファイルのリストを取得するだけでなく、ファイルの読み書きにも役立つチュートリアルがたくさんあります。 (Googleの「Javaの読み込みファイル」、「Javaの書き込みファイル」、「Javaのリストディレクトリ」 - これは基本的に必要なものすべてです)重要なのは、テキストをファイルにプルしてプッシュするためにBufferedReader/BufferedWriterを使用し、 HTMLをファイルに書き込む際に特別なコードサイエンスは必要ないということです。

私は繰り返し述べます。 HTMLは<b>text with tags</b>以上です。

2つのファイルを1つのファイルに出力し、<html></html>タグでそれらをラップする、非常に粗末な例です。

BufferedReader getReaderForFile(filename) { 
    FileInputStream in = new FileInputStream(filename); 
    return new BufferedReader(new InputStreamReader(in)); 
} 

public void main(String[] args) { 
    // Open a file 
    BufferedReader myheader = getReaderForFile("myheader.txt"); 
    BufferedReader contents = getReaderForFile("contentfile.txt"); 

    FileWriter fstream = new FileWriter("mypage.html"); 
    BufferedWriter out = new BufferedWriter(fstream); 

    out.write("<html>"); 
    out.newLine(); 

    for (String line = myheader.readLine(); line!=null; line = myheader.readLine()) { 
     out.write(line); 
     out.newLine(); // readLine() strips 'carriage return' characters 
    } 

    for (String line = contents.readLine(); line!=null; line = contents.readLine()) { 
     out.write(line); 
     out.newLine(); // readLine() strips 'carriage return' characters 
    } 

    out.write("</html>"); 
} 
0

単純なHTMLテキストファイルを作成するには、入力ファイルを1行ずつ読み込む必要はありません。

File theFile = new File("file.html"); 
    byte[] content = new byte[(int) theFile.length()]; 
あなたは完全にバイト配列としてファイルを読むために " RandomAccessFile.readFully" を使用することができます

:テキストコンテンツにあなたの変更を行います

// Read file function: 
    RandomAccessFile file = null; 
    try { 
    file = new RandomAccessFile(theFile, "r"); 
    file.readFully(content); 
    } finally { 
    if(file != null) { 
     file.close(); 
    } 
    } 

String text = new String(content); 
    text = text.replace("<!-- placeholder -->", "generated data"); 
    content = text.getBytes(); 

書き込みも簡単です。

// Write file content: 
    RandomAccessFile file = null; 
    try { 
    file = new RandomAccessFile(theFile, "rw"); 
    file.write(content); 
    } finally { 
    if(file != null) { 
     file.close(); 
    } 
    } 
関連する問題