Eclipse のコンソールで入力し、その内容で処理を行うと楽に処理のテストが可能です。画像の水色の部分が入力部分ですが、Enter で、改行コードを含めて入力されます( Windows で \r\n を確認しました ) 通常のコマンドプロンプトとの違いは、Enter 後、カーソルが次の入力部分に移動しないところです。ですから、CTRL + END で自分で移動する必要があります。
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; import com.google.gson.Gson; public class HttpAndGet { public static void main(String[] args) { // コマンドを入力する為の 128 バイトのバッファ byte[] line = new byte[128]; // コマンド部分を抽出する文字列 String command = ""; int i_len = 0; // 終了コマンド while( !(command.toUpperCase().equals("Q")) ) { try { // プロンプト出力 System.out.print("java>"); // 入力( 改行付きで入力 ) i_len = System.in.read(line); } catch (IOException e) { e.printStackTrace(); } try { // 入力内容を文字列に変換して、入力文を取り出す command = (new String(line, "SJIS")).substring(0, i_len); // コマンドのみに変換 command = command.trim(); } catch (UnsupportedEncodingException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } // コマンド処理( 大文字小文字を区別しない ) if ( command.toUpperCase().equals("HTTPGET") ) { HttpGet(); } // MS932 で判断 if ( command.equals("強制終了") ) { System.out.print("強制終了します"); System.exit(0); } } System.out.print("プログラムを終了しました"); } // ****************************************************************** // JSON を インターネットから取得する // ****************************************************************** public static void HttpGet() { System.out.println("HttpGet を実行中です"); String json_string = ""; try { // JSON の URL URL url = new URL("http://toolbox.winofsql.jp/json/sample2.json"); // 接続オブジェクト HttpURLConnection http = (HttpURLConnection)url.openConnection(); http.setRequestMethod("GET"); // 接続 http.connect(); // http から InputStream を取得する InputStream i_stream = http.getInputStream(); // InputStream から リーダを作成する( キャラクタセットを指定 ) // UTF-8 でリーダーを作成( インターネット上のデータが UTF-8 なので ) InputStreamReader i_stream_reader = new InputStreamReader(i_stream, "UTF-8"); // リーダを行単位で読み込める BufferedReader を使って全ての文字列を取得する ) BufferedReader buffer_reader = new BufferedReader(i_stream_reader); json_string = new TextReader().getText(buffer_reader); // 全て閉じる buffer_reader.close(); i_stream_reader.close(); i_stream.close(); http.disconnect(); } catch( Exception e ) { e.printStackTrace(); json_string = "{ \"winofsql\" : [\"error\"] }"; } // Gson を作成 Gson gson = new Gson(); // 全体の文字列を JSON_ENTRY クラスに投入 // ( 未定義のものは無視されます ) JSON_ENTRY je = gson.fromJson(json_string,JSON_ENTRY.class); // 一覧表示 for( int i = 0; i < je.winofsql.length; i++ ) { System.out.println(je.winofsql[i]); } } // ****************************************************************** // BufferedReader から テキストを取得 // ****************************************************************** static class TextReader { public String getText(BufferedReader br) throws IOException { String result_string = ""; String line_buffer = null; // BufferedReader は、readLine が null を返すと読み込み終了 while ( null != (line_buffer = br.readLine() ) ) { result_string += line_buffer; } return result_string; } } static class JSON_ENTRY { String[] winofsql; } }
▲ このテストは、JSON の入力と Gson を使った デシリアライズです。 ▲ のコードでは、バイナリで読み込んで、new String( buff ) で文字列変換していましたが、以下のコードでは、BufferedReader を使って readLine しています。
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.nio.file.FileSystem; import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.Path; import java.util.Iterator; import java.util.Map; import java.util.Set; import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonParser; public class NioGet { public static void main(String[] args) { // コマンドを入力する為の 128 バイトのバッファ byte[] line = new byte[128]; // コマンド部分を抽出する文字列 String command = ""; int i_len = 0; // 終了コマンドは "q" while( !command.equals("q") ) { try { // プロンプト出力 System.out.print("java>"); // 入力 command = (new BufferedReader( new InputStreamReader(System.in, "SJIS") )).readLine(); } catch (IOException e) { e.printStackTrace(); } // コマンド処理( 大文字小文字を区別しない ) if ( command.toUpperCase().equals("GET") ) { JsonGetFromFile(); } } System.out.print("プログラムを終了しました"); } public static void JsonGetFromFile() { FileSystem fs = FileSystems.getDefault(); byte[] file_dataFiles = null; Path target = fs.getPath("C:\\user\\lightbox\\java2\\JSON\\sample1\\JsonGet2\\file\\json.txt"); try { file_dataFiles = Files.readAllBytes(target); } catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } String string_file_data = new String(file_dataFiles); System.out.println(string_file_data); print_json(string_file_data); // Gson を作成 Gson gson = new Gson(); // 全体の文字列を JSON_ENTRY クラスに投入 // ( 未定義のものは無視されます ) JSON_ENTRY je = gson.fromJson(string_file_data,JSON_ENTRY.class); // 固定フォーマットであればこの方法が確実 System.out.println(je.id); System.out.println(je.description); System.out.println(je.status.text); // 存在する場合のみ出力 if ( je.status.abc != null ) { System.out.println(je.status.abc); } } // デシリアライズ用のクラス static class JSON_ENTRY { String id; String description; JSON_STATUS status; } static class JSON_STATUS { String text; String abc; } public static void print_json( String json_string ) { // パーサーを取得 JsonParser jp = new JsonParser(); // 文字列をパース JsonElement je = jp.parse(json_string); // key と value を取得する為に、JsonObject から、entrySet メソッドを実行 Set<Map.Entry<String, JsonElement>> entrySet = je.getAsJsonObject().entrySet(); // イテレータを取得 Iterator<Map.Entry<String, JsonElement>> it = entrySet.iterator(); // 一覧表示 while(it.hasNext()) { Map.Entry<String, JsonElement> entry = it.next(); String key = entry.getKey(); JsonElement value = entry.getValue(); System.out.print(key+" : "); if ( value.isJsonObject() ) { System.out.println("【OBJ】-->" ); print_json( value.toString() ); } else { if ( value.isJsonNull() ) { System.out.println("NULL"); } else { if ( value.isJsonArray() ) { JsonArray ja = (JsonArray)value; System.out.println("【ARRAY】-->" ); print_json_array(ja); } else { System.out.println(value.getAsString()); } } } } } public static void print_json_array( JsonArray ja ) { for( int i = 0; i < ja.size(); i++ ) { if ( ja.get(i).isJsonObject() ) { print_json( ja.get(i).toString() ); } if ( ja.get(i).isJsonNull() ) { System.out.println("NULL"); } if ( ja.get(i).isJsonArray() ) { print_json_array( (JsonArray)ja.get(i) ); } if ( ja.get(i).isJsonPrimitive() ) { System.out.println(ja.get(i).getAsString()); } } } }
このテストは、System.nio を使った、ファイルの一括読み込みと、Gson を使った JSON の一覧処理です
|
【Javaの最新記事】
- Java : Apache POI で最低限の処理を標準化( ここではワークブックは新規作成 )
- Java で JSON 文字列を オブジェクトに変換する Google Gson の基本 4 パターン
- Java のコンソールで NAVER の RSS を取得して、title 部分を正規表現で加工して表示するサンプル
- Eclipse で、文字列内のファイルのパスの \ 記号を \\ にする方法
- Java : Google gson 2.3.1 で JSON 文字列を定義済みのクラスを使ってオブジェクト化
- Java : Google gson 2.3.1 で、JSON 文字列のフォーマットが解らなくてもなんとかなる『ベタ』な処理方法
- Eclipse のホバーで追加したライブラリの javadoc を表示させる手順
- Eclipse+WindowBuilder : DBアプリケーション(社員マスタメンテ)の更新(データ修正)処理
- Eclipse+WindowBuilder : DBアプリケーション(社員マスタメンテ)の入力チェック
- Eclipse+WindowBuilder : DBアプリケーション(社員マスタメンテ)の二会話画面制御
- Eclipse+WindowBuilder : DBアプリケーション(社員マスタメンテ)でDBからSELECT構文で行データを読み出す
- Eclipse+WindowBuilder : ボタンイベント(AbstractAction) の作成
- Eclipse+WindowBuilder : データベースアプリケーション(社員マスタメンテ)の画面作成
- Eclipse + WindowBuilder : JDBC と ODBC を使った、オールマイティなデータベース接続サンプル( MySQL / SQLServer / Oracle / Postgr..
- Eclipse + WindowBuilder : Design タブが表示されなくなった時の対処
- Eclipse のパンくずリスト(breadcrumb) をワークスペースの設定ファイルで非表示にする
- iText( itextpdf-5.4.3 / Java ) で簡単に PDF 出力をする。
- SQL 文へのデータバインド用 public class GetSQL
- ADT( Android Development Tools ) Eclipse に Window Builder をインストールして Swing アプリケーションを作成する(2)
- Java : Windows の環境変数の列挙( 含ソート )