import java.io.IOException; import java.net.URL; import java.net.HttpURLConnection; import java.util.ArrayList; import java.util.List; import java.io.BufferedInputStream; public class GetWave { public static void main( String[] args ) { HttpURLConnection httpURLConnection = null; try { URL url = new URL( "https://suzulang.com/" ); httpURLConnection = (HttpURLConnection)url.openConnection(); httpURLConnection.setRequestMethod( "GET" ); String ContentType = httpURLConnection.getHeaderField("Content-Type") ; String[] cts = ContentType.split("[;/= ]"); /* ↑ HTTPレスポンスヘッダのContent-Typeを取得する。 Content-Type: text/html; charset=shift_jis のような形をしているので、各特殊記号とスペースを区切り文字としてsplitして、 charsetの次に入っているのが文字列と判断。(↓コード) ただし、Content-Type: text/html;で終わっている場合もある。 */ //文字コードの判別 String CharSet = null; for( int i = 0; i < cts.length; i++){ if( cts[i].toLowerCase().equals("charset") ){ if( i+1 == cts.length ){ CharSet = null; } else{ CharSet = cts[i+1]; } } } if( CharSet == null ){ //文字コード指定がなかったらとりあえずUTF-8にする CharSet = "UTF-8"; } /* ただのInputStreamはreadする度に読みに行くので効率が悪いらしい。 BufferedInputStreamは一度のアクセスで大量のデータを取得する htttp://e-class.center.yuge.ac.jp/jdk_docs/ja/api/java/io/BufferedInputStream.html */ BufferedInputStream bis = new BufferedInputStream(httpURLConnection.getInputStream() ); List<Byte> alldata = new ArrayList<Byte>(); //HTML取得 byte [] buf = new byte[1024*4]; int readsize; while( ( readsize = bis.read(buf) ) >= 0 ){ for(int i = 0; i < readsize; i++){ alldata.add( buf[i] ); } } //バイトの配列に変換 byte tostr[] = new byte[ alldata.size() ]; for(int i = 0; i < alldata.size(); i++){ tostr[i] = alldata.get(i); } /* Stringはコンストラクタで文字コードを指定できる。 String(byte[] , Charset)の場合、byteの中の文字コードがCharsetであることを示す。結果、 resultにはUTF-8に変換された文字列が入る。 */ //表示 String result = new String(tostr, CharSet); System.out.println(result); } catch( IOException e ) { e.printStackTrace(); } finally { if( httpURLConnection != null ) { httpURLConnection.disconnect(); } } } }
コンパイル:
>javac GetWave.java
実行
>java GetWave
参考文献:
http://www.kab-studio.biz/Programing/JavaA2Z/Word/00000803.html