• ベストアンサー

JavaにHTMLを代入。力を貸してください。

文章を縦書きでに変換するソフトを作っています。 横書きファイル→変換ソフト→縦書きファイル(変換後は拡張子がHTML)になるようにしたいです。 ここまでは作れましたがJava中にHTMLを入れることはできるのでしょうか? import java.awt.*; // file.java filedialog(black) import java.awt.event.*; import java.io.*; public class file { public static void main(String [] args) { fra f = new fra("Dialogs"); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {System.exit(0);}}); } } class fra extends Frame implements ActionListener { int i,j,k; MenuBar mb; Menu m1,m2; MenuItem mi1,mi2; Label lab; FileDialog dialog; String fn; byte ba[]=new byte[5000], da[]=new byte[10000]; fra(String s) { super(s); setSize(200,200); show(); lab = new Label("File contents area"); setLayout(new GridLayout(1, 1)); mb = new MenuBar(); add(lab); m1 = new Menu("File"); mi1 = new MenuItem("Open"); m1.add(mi1); mi1.addActionListener(this); mi2 = new MenuItem("Exit"); m1.add(mi2); mi2.addActionListener(this); mb.add(m1); dialog = new FileDialog(this, "File Dialog"); m2 = new Menu("Help"); mb.add(m2); setMenuBar(mb); } public void actionPerformed(ActionEvent e){ if(e.getSource() == mi1){ dialog.setVisible(true); fn=dialog.getFile(); lab.setText("You chose " + fn); info(fn); int n1=fis(fn, ba); for(i=0;i<n1;i++)da[i]=ba[i]; ★ ★ ★ ★ fos("a0.html", da ,n1); } if(e.getSource() == mi2)System.exit(0); } void info(String s) { File f = new File(s); System.out.println("================== File information ================="); System.out.print("File: "+f.getName() + (f.isFile() ? " is a file" : " is a named pipe or directory")); System.out.println(" Size: " + f.length()); System.out.println("Path: "+f.getPath()+" " + f.getAbsolutePath()); System.out.print("File was last modified: " + f.lastModified()); System.out.println(f.exists() ? " File exists" : " File does not exist"); System.out.print(f.canRead() ? "File can be read" : "File cannot be read"); System.out.print(f.canWrite() ? " File can be written" : " File cannot be written"); System.out.println(f.isDirectory() ? " File is a directory" : " File is not a directory"); } int fis (String s, byte ba[]) { int n1=0; System.out.println("=================== FileInputStream ================="); try{ FileInputStream f = new FileInputStream(s); System.out.println("File input stream size : " + f.available()); n1=f.read(ba); System.out.println("file length="+n1); System.out.println(new String(ba,0,n1)); f.close();} catch (IOException e){System.out.println(e);} System.out.println("FileInputStream size n1="+n1); return n1;} void fos(String s2, byte da[], int n2) {; System.out.println("==================FileOutputSream ==================="); try {FileOutputStream g = new FileOutputStream(s2); g.write(da,0,n2); g.close();} catch (IOException e){System.out.println(e);} System.out.println("File "+s2+" generated."); } ★があるところに入れればうまくいくんでしょうか? HTMLでは <style type="text/css"> <!-- .tate { position: absolute; width:1em; text-align: center; top: 10em; } --> </style> <div class="tate" style="left:20em;">あいうえお</div> <div class="tate" style="left:18em;">かきくけこ</div> <div class="tate" style="left:16em;">さしすせそ</div> このようにすれば縦書き表示になることがわかりました。 しかし、これでは変換したいファイルの中身をいちいち記述しないと いけないので万能性がありません。 どのようにすればうまくいくでしょうか? わかる方教えてください。 よろしくお願いします。

  • Java
  • 回答数4
  • ありがとう数0

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

  • ベストアンサー
回答No.4

String header = "<html> <head> <title>TAG index Webサイト</title> <style type="text/css"> <!-- p { writing-mode: tb-rl; white-space: nowrap; font: 200%/150% serif; } --> </style> </head> <body> <p>" String footer = "</p> </body> </html> " StringBuffer out = new StringBuffer(header); while(読み込んだファイル行数){ out.append(読み込んだ1行).append("<br>"); } out.append(footer); ファイル出力(out) No2さんの参考サイトを利用させてもらいました。 (エスケープとかしてない適当未検証なのでおかしいところは五字分で修正してください)

その他の回答 (3)

回答No.3

入力したファイル名の最後にある「.」から前の部分を仮に「入力ファイル名」として「入力ファイル名」 + 「h」 + 「.html」で出力したらよいのでは?

rosemary71
質問者

補足

なるほど。参考になります。 あと縦書きに変換するプログラムはどうやってJava内に 記述すればよいでしょうか? これも万能性があるように横書きのテキストを Javaで縦書きにするようにしたいんですが。 何度もすいませんがよろしくお願いします。

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.2

css の writing-mode ? http://www.google.com/search?lr=lang_ja&q=css%20%E7%B8%A6%E6%9B%B8%E3%81%8D HTMLだからそういうのじゃだめなのかな 今はまだIEでしか出ないらしいけど。

回答No.1

質問の意図がいまいち分からないです。 インプット、アウトプットがどういう結果になればいいんでしょ? たとえば・・・ aaa.txtというテキストファイルがありその中身が あいうえお(改行) かきくけこ(改行) さしすせそ(EOF) となっており、変換した結果 あかさ(改行) いきし(改行) うくす(改行) えけせ(改行) おこそ(EOF) 上記内容でbbb.txtというテキストファイルを出力する。 といった具合でやりたい内容をもう少し具体的に説明してください。

rosemary71
質問者

補足

わかりづらくてすいません。 インプット、アウトプットは特にそれほど重要ではないです。 インプットがaaa.htmlというファイルがあれば そのバイト数を数え表示、さらにファイルの内容をemacsに表示 アウトプットは新しく縦書きに出来たソフト(上のソースではa0.html)の 名前をemacsに表示。 やりたい内容はProKaseifuさんがおっしゃったものそのものです。 aaa.txtというテキストファイルがありその中身が あいうえお(改行) かきくけこ(改行) さしすせそ(EOF) となっており、変換した結果 あかさ(改行) いきし(改行) うくす(改行) えけせ(改行) おこそ(EOF) 上記内容でbbb.txtというテキストファイルを出力する。 違うのは ファイルがテキストではなくHTMLファイル。 現在のソースだと縦書きに変換されたファイルがa0.htmlと 名前が固定されているので、元のファイル名の前に『t-』なんかを つけるようにしたいです。 横書き変換 縦書き変換 aaa.html →t-aaa.htmlみたいな感じにしたいです。 よろしくお願いします。

関連するQ&A

  • java ファイル操作

    現在javaでファイル操作しファイルの文字列を検索したりファイルに文字列を追加したりする ものを作成しています。 現状のコードはこのような感じです。 class addresskensaku{ public static void main(String[] args)throws IOException{ System.out.println("数字を選択\n1.名前で検索\n2.年齢で検索\n3.出身地で検索\n4.追加"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); char res = str.charAt(0); //1が選択された場合 if(res == '1' || res == '1'){ System.out.println("名前を入力してください。"); BufferedReader fn = new BufferedReader(new InputStreamReader(System.in)); String str1 = fn.readLine(); try{ FileReader freader = new FileReader("addressdata.txt"); BufferedReader breader = new BufferedReader(freader); String tmp = null; //検索 System.out.println("検索結果 :"); while((tmp=breader.readLine())!=null){ String[] words = tmp.split(","); //部分一致 if(words[0].indexOf(str1) != -1){ System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } //2が入力された場合 if(res == '2' || res == '2'){ System.out.println("年齢を入力してください。"); BufferedReader o = new BufferedReader(new InputStreamReader(System.in)); String ol = o.readLine(); try{ FileReader freader = new FileReader("addressdata.txt"); BufferedReader breader = new BufferedReader(freader); String tmp =null; //検索 while((tmp=breader.readLine())!=null){ String[] words = tmp.split(","); //完全一致 if (ol.equals(words[1])){ // System.out.println("検索結果:"); System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } //3が入力された場合 if(res == '3' || res == '3'){ System.out.println("出身地を入力してください。"); BufferedReader p = new BufferedReader(new InputStreamReader(System.in)); String pref = p.readLine(); try{ FileReader freader = new FileReader("addressdata.txt"); BufferedReader breader = new BufferedReader(freader); String tmp = null; //検索 while((tmp=breader.readLine())!=null){ String[] words = tmp.split(","); //部分一致 if(words[2].indexOf(pref) != -1){ System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } //4が入力された場合 追加 if(res == '4' || res == '4'){ //氏名入力 System.out.println("氏名を入力してください。"); BufferedReader n = new BufferedReader(new InputStreamReader(System.in)); String str2 = n.readLine(); //年齢入力 System.out.println("年齢を入力してください。"); BufferedReader o = new BufferedReader(new InputStreamReader(System.in)); String str3 = o.readLine(); //住所入力 System.out.println("住所を入力してください。"); BufferedReader a = new BufferedReader(new InputStreamReader(System.in)); String str4 = a.readLine(); //ファイルに書き込み try{ File file = new File("addressdata.txt"); FileWriter filewriter = new FileWriter(file, true); filewriter.write(str2+","+str3+","+str4+"\r\n"); filewriter.close(); }catch(IOException e){ System.out.println("e"); } } } } これをカプセル化し 各機能ごとにメソッドを分けて作ろうかなと思っています。 結果の出力はmainでやる予定です。

  • 文字のバイトサイズの取得

    25バイト以上ある文字配列を25バイトまでに切り取りたいのです。 全て半角英数ならstr.substring(0 ,25)ですみますが 日本語も入っているのでsubstringが使えません。 そこで,バイト配列を使おうと思ったのですがうまくいきません。どうかお願いします。 例) String E = "AAAAAAAAAAAAAあああああああ"; byte S[] = new byte[100]; S=E.getBytes(); ByteArrayOutputStream out = new ByteArrayOutputStream(); for(int n = 0; n < 25 ; ++n){ out.write(S[n]); } System.out.println(out.toByteArray()); 結果として"AAAAAAAAAAAAAあああ"が出力されてほしい

    • ベストアンサー
    • Java
  • JavaでXORによる暗号化

    JavaでXORによる暗号化について調べていたら下記URLのサイトを見つけました。 http://www.eeb.co.jp/2007/07/_10_1.html そこでサンプルにあった下記プログラムをvalue と key を変えて実行してみたところ value の中の「は」、「で」がうまく復元されず文字化けしてしまいました。 どこが悪いのかよくわからないのですがお分かりになられる方がいらっしゃいましたら 教えていただけますでしょうか。 public class XorTest { //================================================== // メイン //================================================== public static void main(String[] args) { String value = "abcd本日はお日柄もよろしいようで"; String key = "1"; // 暗号化前出力 print("暗号化前", value); // 暗号化 byte[] byteEncodeArray = encode(value.getBytes(), key); value = new String(byteEncodeArray); // 暗号化後出力 print("暗号化後", value); // 復元 byte[] byteDecodeArray = decode(value.getBytes(), key); value = new String(byteDecodeArray); // 復元後出力 print("復元後", value); } //================================================== // 暗号化 //================================================== private static byte[] encode(byte[] src, String key) { byte[] byteKeyArray = new byte[0]; byte[] byteEncArray = new byte[src.length]; // キーの文字列を変換する文字列をカバーするまで繰り返す while(byteKeyArray.length < src.length) { byteKeyArray = (new String(byteKeyArray) + key).getBytes(); } // 変換 for (int i = 0; i < src.length; i++) { byteEncArray[i] = (byte)(src[i]^byteKeyArray[i]); } return byteEncArray; } //================================================== // 復元 //================================================== private static byte[] decode(byte[] src, String key) { return encode(src, key); } //================================================== // ダンプ文字列取得 //================================================== private static String getDump16(byte[] value) { StringBuffer buf = new StringBuffer(); for (int i = 0; i < value.length; i++) { String hex = Integer.toHexString((int)value[i] & 255); // 4桁に揃える hex = "0000" + hex; hex = hex.substring(hex.length() - 4, hex.length()); // バッファに追加(空白区切り、10桁ずつ改行) buf.append(hex + (i % 10 == 9?System.getProperty("line.separator"):" ")); } return buf.toString().trim(); } private static void print(String title, String value) { System.out.println("【 " + title + " 】"); System.out.println("-----------------------------"); System.out.println(value); System.out.println(getDump16(value.getBytes())); System.out.println(); System.out.println(); } }

    • ベストアンサー
    • Java
  • NullPointerExceptionの件

    あるフォルダからファイルのみを取得する処理です。 うまく動くときもあるのですがたまに←の部分でNullPointerExceptionエラーが起こります。 わかる方は教えてください。 public static String[] ExtractFile(String s[],String Folder){//フォルダからファイルのみを抽出 String umeBackup[]; File f = new File( Folder ); System.out.println("2:" + f.getAbsolutePath()); String files[] = f.list(); int N = files.length; ←←←←← int k; String FileName; for( k=0; k<N; k++ ){ FileName = Folder + "/" + files[k]; File file = new File( FileName ); if( file.isFile() ){ umeBackup = s; s = new String[s.length + 1]; System.arraycopy(umeBackup, 0, s, 0, umeBackup.length); umeBackup = null; s[s.length - 1] =files[k]; } } System.out.println(s.length); f = null; return s; }

  • Javaのコンストラクタについて教えてください

    Javaを勉強している初心者です。 次のようなプログラムがあります。 このプログラムでclass aおよびclass bのデフォルトコンストラクタ a() {}とb() {}をコーディングしていないとコンパイルエラーになります。 b() {}についてはclass bのパラメータのあるコンストラクタb(String s)がサブクラスclass cから明示的に呼ばれていないのでデフォルトコンストラクタb() {}をコーディングしないとエラーになる…と考えればよいのでしょうか。 それでは、a() {}はなぜ必要なのでしょうか。 どなたか教えてください。 class a { a() {} a(String s) { System.out.println("In a's constructor..."); System.out.println(s); } } class b extends a { b() {} b(String s) { super(s); System.out.println("In b's constructor..."); System.out.println(s); } } class c extends b { c(String s) { System.out.println("In c's constructor..."); System.out.println(s); } public void some() { System.out.println("something..."); } } public class appJ01 { public static void main(String args[]) { c obj = new c("Hello from Java!"); } } 

  • javaについて

    キーボードから入力をして、その後str[0][0]とstr[1][0]の文字を繋げたいのですがエラーとなってしまいます。どう変えたらよいでしょうか。 以下がプログラムです。 import java.io.*; import java.lang.*; import java.net.*; import java.awt.*; class gugu3 { public static void main(String[] args) throws IOException { int KEYWORDMAX=10; int CNTMAX=100; String [][]str = new String[KEYWORDMAX][CNTMAX]; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String line=null; for (int i=0;i<KEYWORDMAX;i++){ System.out.println("第"+(i+1)+"番目のキーワードを設定しますか?(y/n)"); line=br.readLine(); if(line.equals("n")) break; for (int s=0;s<CNTMAX;s++){ System.out.println("キーワードを入力してください(終了=0)"); line=br.readLine(); if(line.equals("0"))break; str[s][i]=line; } } String keyword = new String(str[0][0]" "str[1][0]); System.out.println("キーワードは "+keyword); } } 以下はエラー表示です。 gugu3.java:24: ')' がありません。 String keyword = new String(str[0][0]" "str[1][0]); ^ gugu3.java:24: 文ではありません。 String keyword = new String(str[0][0]" "str[1][0]); ^ gugu3.java:24: ';' がありません。 String keyword = new String(str[0][0]" "str[1][0]); ^ エラー 3 個

    • ベストアンサー
    • Java
  • Javaでファイル転送プログラム

    Javaを用いてファイル転送プログラムを作成しています。 http://d.hatena.ne.jp/rintaromasuda/20060327/1143412352 を参考に作成したのですが、うまく転送できません。 プログラムは以下の通り。 ◎サーバ側 import java.net.*; import java.io.*; public class UMLFileServer { public static void main(String[] args) throws IOException{ if (args.length != 2) throw new IllegalArgumentException("An argument should be port and filename"); int servPort = Integer.parseInt(args[0]); String filename = args[1]; System.out.println("Output file name : " + args[1]); //Create FileOutputStream FileOutputStream fout = new FileOutputStream(filename); //Create ServerSocket ServerSocket servSock = new ServerSocket(servPort); int recvMsgSize; //int bufSize = servSock.getReceiveBufferSize(); int bufSize = 32; System.out.println("Size of ReceiveBuffer : " + bufSize); //Socket accepting loop while(true){ System.out.println("Wait for accepting... "); Socket clntSock = servSock.accept(); byte[] byteBuffer = new byte[bufSize]; System.out.println("Accepted client at " + clntSock.getInetAddress().getHostAddress() + " on port " + clntSock.getPort()); //Create InputStream InputStream in = clntSock.getInputStream(); //Read message and print it out int totalByte = 0; while((recvMsgSize = in.read(byteBuffer)) != -1){ System.out.println("Message : " + new String(byteBuffer,0,recvMsgSize)); System.out.println("Size : " + recvMsgSize); //Write to file totalByte = totalByte + recvMsgSize; fout.write(byteBuffer,0,recvMsgSize); } System.out.println("Recieved file size : " + totalByte); clntSock.close(); fout.close(); fout = null; } } } ◎クライアント側 import java.net.*; import java.io.*; public class UMLFileClient { public static void main(String[] args) throws IOException{ if (args.length != 3) throw new IllegalArgumentException("Arguments should be host,port and filepath"); String server = args[0]; int serverPort = Integer.parseInt(args[1]); String filename = args[2]; byte[] data = new byte[32]; //ソケットの作成 Socket socket = new Socket(server,serverPort); System.out.println("Connected to server"); //ストリームの作成 FileInputStream fin = new FileInputStream(filename); OutputStream out = socket.getOutputStream(); //ファイルの内容を読み出し、送信する System.out.println("Sending file : " + filename); int totalSize = 0; int len = 0; while ((len = fin.read(data)) != -1) { totalSize = totalSize + len; System.out.println(new String(data,0,len)); out.write(data, 0, len); } fin.close(); fin = null; System.out.println("size of file : " + totalSize); socket.close(); } } ◎実行結果 Output file name : hiroyasu.txt Size of ReceiveBuffer : 32 Wait for accepting... Accepted client at 192.168.71.104 on port 36608 Recieved file size : 0 Wait for accepting... 以上です。どなたか解決方法をご教授ください。

    • ベストアンサー
    • Java
  • javaのプログラムについて

    以下のプログラムを実行するとエラーが起こるのですが原因はなんですか? class Tokuten { private String name; private int eng; private int math; private int sci; public void setData(String n, int e, int m, int s) { if(g>0 && g <1000){ name = n; eng = e; math = m; sci = s; } void show() { System.out.println("受験生の名前は" + name + "です。"); System.out.println("英語は" + eng + "点です。"); System.out.println("数学は" + math + "点です。"); System.out.println("理科は" + sci + "点です。"); } } class TokutenMain { public static void main(String[] args) { Tokuten jukensei = new Tokuten(); jukensei.setData("Hanako",81,67,78); jukensei.show(); } }

  • java プログラミングについて

    独学でjavaに挑戦中ですが、書店で購入した本のソースプログラムを少し変えたいのですが、ご教授をお願いします。数当てゲームのプログラムで、一つの設問を正解すると終了するゲームですが、複数の設問を設定したいのです、質問がうまく伝わるか不安ですがよろしくお願いします、プログラムを少しだけ書いておきます。 import java.io.*; class Mojiretuate { public static void main(String[] args) throws IOException { String str = "こんにちは";  /*質問箇所*/ String str2; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("文字列当てゲームです。"); System.out.println("答えは何かのあいさつです。"); for(;;){ System.out.println("\n入力:"); str2 = br.readLine(); System.out.println("入力文字列の長さ:" + str2.length()); if(str.equals(str2)){ System.out.println("正解です!"); break; } 

    • ベストアンサー
    • Java
  • javaでファイル操作し検索するものを作ってます

    目的はテキストファイル内の文字列に検索をかけヒットしたものを表示する というものです import java.io.*; class kensakuTest{ public static void main(String[] args)throws IOException{ System.out.println("検索方法を選択してください。\n0:学籍番号で検索\n1:名前で検索\n2:出身地で検索"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); char res = str.charAt(0); //0が選択された場合 if(res == '0'){ System.out.println("学籍番号を入力してください。"); BufferedReader bn = new BufferedReader(new InputStreamReader(System.in)); String str0 = fn.readLine(); char num = str0.charAt(0); try{ FileReader freader = new FileReader("addressdata.txt"); BufferedReader breader = new BufferedReader(freader); String tmp = null; while((tmp=breader.readLine())!=null){ //完全一致 if(){ System.out.println("検索結果:"); System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } //1が選択された場合 if(res == '1'){ System.out.println("名前を入力してください。"); BufferedReader fn = new BufferedReader(new InputStreamReader(System.in)); String str1 = fn.readLine(); char name = str1.charAt(0); try{ FileReader freader = new FileReader("data.txt"); BufferedReader breader = new BufferedReader(freader); String tmp = null; //検索 //部分一致 while((tmp=breader.readLine())!=null){ if(tmp.indexOf(str1) > -1){ System.out.println("結果は:"); System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } //2が入力された場合 if(res == '2'){ System.out.println("出身地を入力してください。"); BufferedReader bl = new BufferedReader(new InputStreamReader(System.in)); String belong = bl.readLine(); try{ FileReader freader = new FileReader("addressdata.txt"); BufferedReader breader = new BufferedReader(freader); String tmp = null; while((tmp=breader.readLine())!=null){ //完全一致 if(){ System.out.println("検索結果:"); System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } } } 現状はここまでできましたが完全一致の検索のやり方がわかりません。 あと問題点があるのですが 読み取るファイルがこのような場合 2000,田中 太郎,福島県 2001,福島 太郎,東京都 名前で福島 と検索をかけたとします この場合答えが 2000,田中 太郎,福島県 2001,福島 太郎,東京都 と表示されてしまいます このカンマで区切られている学籍番号、名前、出身地をうまく分け それぞれ判別する方法はないのでしょうか? よろしくおねがいします。

    • ベストアンサー
    • Java