SQLの窓

2020年10月27日


Java : WEB上のテキストファイルを取得する

キャラクタセットを指定してテキストとして取得

テキストファイルの入出力はこちらを参照して下さい。 InputStream の扱いはテキストファイルを基本に考えれば良いと思います。 WEB 上のデータも結局 InputStream で取得しています。
import java.net.*;
import java.io.*;

public class Main {

	public static void main(String[] args) {

		try {

			// 書き込みファイル名
			String filename = "index.html";
			// テキストで書き込み為の俊美
			BufferedWriter bw = new BufferedWriter(
					new OutputStreamWriter(
						new FileOutputStream(filename), "UTF8"
					) 
			);			

			// URL文字列
			String str = "https://lightbox.sakura.ne.jp/demo/template/basic/basic-html/req/basic-req-2div.html";
			// ターゲット
			URL url = new URL( str );
			// 接続オブジェクト
			HttpURLConnection http = (HttpURLConnection)url.openConnection();
			// GET メソッド 
			http.setRequestMethod("GET");
			// 接続 
			http.connect();
			 
			// UTF-8 でリーダーを作成
			InputStreamReader isr = new InputStreamReader(http.getInputStream(), "utf8");   
			// 行単位で読み込む為の準備   
			BufferedReader br = new BufferedReader(isr);   
			String line_buffer;   
			// BufferedReader は、readLine が null を返すと読み込み終了   
			while ( null != (line_buffer = br.readLine() ) ) {   
				// 書き込み
				bw.write( line_buffer + "\r\n" );
			}
 
			// 閉じる   
			br.close();		// BufferedReader
			isr.close();	// InputStreamReader
			http.disconnect();		// HttpURLConnection
			bw.close();		// BufferedWriter

		}
		catch( Exception e ) {
			System.out.println( e.getMessage() );
		}
	}
}

バイナリデータとしてそのままファイル化したものを使う

単純にダウンロードするだけならば、キャラクタセットを考慮する必要はありません
import java.net.*;
import java.io.*;
import java.util.*;

public class Main {

	public static void main(String[] args) {

		byte[] buffer = new byte[4096];
		int readByte = 0;

		try {
			// ターゲット
			URL url = new URL("https://lightbox.sakura.ne.jp/demo/template/basic/basic-html/req/basic-req-2div.html");
			// 接続オブジェクト
			HttpURLConnection http = (HttpURLConnection)url.openConnection();
			// GET メソッド 
			http.setRequestMethod("GET");
			// 接続 
			http.connect();
			
			DataOutputStream dataOutStream =
			new DataOutputStream(
				new BufferedOutputStream(
					new FileOutputStream("index.html")));			

			BufferedInputStream bis = new BufferedInputStream( http.getInputStream() );   
			// バイトでの読込み 
			DataInputStream dis = new DataInputStream(bis);   

			while ( -1 != (readByte = dis.read(buffer) ) ) {   
				// コマンドプロンプトに表示   
				dataOutStream.write(buffer, 0, readByte);
			}

			// 各々受け持ちクラスを閉じる   
			dis.close();
			bis.close();
			
			dataOutStream.close();

			http.disconnect();
		}
		catch( Exception e ) {
			
		}
	}
}



関連するドキュメント

サポートされるエンコーディング ( JDK 11 )
posted by lightbox at 2020-10-27 21:44 | java : 通信関連 | このブログの読者になる | 更新情報をチェックする

2020年10月18日


Java11 + Visual Studio Code + JavaMail( with JavaBeans Activation Framework )

Java Extension Pack をインストール後 Java11 へパスを通しています

詳細に JSK の参照を設定するには、Java: Configure Java Runtime で設定画面を表示させます。 JavaMail JavaBeans Activation Framework Java11 で JavaMail を使用するには、JavaBeans Activation Framework を参照する必要があります。しかし Maven を使用すれば、使用する JDK を選択して JavaBeans Activation Framework なしで実行可能です。 Maven を使用する場合は、ダウンロードしてパスを通したうえに、JAVA_HOME に JDK のバスを設定する必要があります。

🔻 Java: Configure Java Runtime

Getting Started with Java in VS Code 参考1) Visual Studio Code で Java + Maven 環境を設定してデバッグ実行する 参考2) VSCodeでMavenプロジェクトをデバッグする
import java.util.*;
import java.io.*;
import javax.mail.*;
import javax.mail.internet.*;

public class Main {

	// *******************************************
	// エントリポイント
	// *******************************************
	public static void main(String[] args) {
		new Main();
	}

	// *******************************************
	// コンストラクタ
	// *******************************************
	public Main() {
		my_acton();
	}

	// *******************************************
	// 初期処理
	// *******************************************
	private void my_acton() {

		// 通常入力用
		Scanner scan = new Scanner(System.in);
		// パスワード入力用
		Console console = System.console();

		MyTool out = new MyTool( ">>>" );
		out.println("処理開始");

		// アカウント入力
		out.println("アカウントの入力");
		String user = scan.nextLine();
		if ( user.equals("") ) {
			out.println( "処理を途中で終了します" );
			return;
		}
		out.println( user );

		// パスワード入力
		char[] pass = console.readPassword( "パスワードを入力してください : " );
		String password = new String( pass );

		// 宛先入力
		out.println("宛先の入力");
		String to = scan.nextLine();
		out.println( to );


		// *******************************************
		// プロパティオブジェクトを作成
		// プロパティオブジェクトは、
		// extends Hashtable(連想配列)
		// *******************************************
		Properties props = new Properties();
	
		// *******************************************
		// ( Gmail では、安全性の低いアプリのアクセスを有効にする必要があります )
		// ▼ G Suite では、安全性の低いアプリのアクセスは使用できません
		// https://gsuiteupdates-ja.googleblog.com/2019/12/g-suite_24.html
		// *******************************************
		props.put("mail.smtp.host","smtp.lolipop.jp");	// ロリポップ
//		props.put("mail.smtp.host","smtp.mail.yahoo.co.jp");	// Yahoo!
//		props.put("mail.smtp.host","smtp.gmail.com");	// Gmail
		
		props.put("mail.smtp.auth", "true" );	// SMTP 認証を行う

		// ▼ 465( SSL )
		props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
		props.put("mail.smtp.socketFactory.fallback", "false");
		props.put("mail.smtp.socketFactory.port", "465");

		// *******************************************
		// メール用のセッションを作成
		// *******************************************
		SimpleAuthenticator sa =
			new SimpleAuthenticator( user , password );
		Session MailSession = 
			Session.getInstance( props, sa );
	
		try {
	
			// *******************************************
			// メール用のメッセージオブジェクトを作成
			// *******************************************
			MimeMessage msg = new MimeMessage(MailSession);
	
			// *******************************************
			// 宛先
			// *******************************************
			msg.setRecipients(
				Message.RecipientType.TO, String.format("%s <%s>",
				MimeUtility.encodeText(
					"あなた",
					"iso-2022-jp",
					"B"
				), to )
			);
	
			// *******************************************
			// 送信者
			// *******************************************
			msg.setFrom(
				new InternetAddress( String.format("%s <%s>",
				MimeUtility.encodeText(
					"わたし",
					"iso-2022-jp",
					"B"
				), user )  )
			);
	
			// *******************************************
			// 件名
			// *******************************************
			msg.setSubject(
				MimeUtility.encodeText(
					"日本語件名",
					"iso-2022-jp",
					"B"
				)
			);
	
			// *******************************************
			// 本文
			// *******************************************
			msg.setContent(
				"本文\r\n本文",
				"text/plain; charset=\"iso-2022-jp\""
			);
	
			// *******************************************
			// 送信
			// *******************************************
			Transport.send( msg );
	
		}
		catch (Exception e) {
			out.println( e.getMessage() );
			out.println("送信エラー");
		}

		out.println("処理終了");

	}

	// *******************************************
	// 内部用クラス
	// *******************************************
	private class MyTool {

		private String mark = null;

		MyTool(String pm) {
			mark = pm;
		}

		public void println(String str) {
			System.out.println( this.mark + str );
		}

	}

	// ***********************************************
	// 認証用のプライベートクラス
	// ***********************************************
	private class SimpleAuthenticator extends Authenticator {
	
		private String user_string = null;
		private String pass_string = null;
	
		public SimpleAuthenticator( String user_s, String pass_s ) {
			super();
			user_string = user_s;
			pass_string = pass_s;
		}
	
		protected PasswordAuthentication getPasswordAuthentication(){
			return new PasswordAuthentication( this.user_string, this.pass_string );
		}
	}

}


JavaMail API documentation

安全性の低いアプリによる G Suite アカウントへの接続が無効に



posted by lightbox at 2020-10-18 16:57 | java : 通信関連 | このブログの読者になる | 更新情報をチェックする

2018年10月24日


Javamail で IMAP 受信

https://javaee.github.io/javamail/


マルチパートは、最大3つまでチェックして、2番目か3番目に添付ファイルがあれば保存します。
2番目が HTML メールの場合は、標準出力に出力します。

ヘッダ部分は、メッセージ番号で取得しますが、違った処理を行う為に UID に変換しておいて、本文の取得には UID を使用します。

メッセージボックス(フォルダ) にメッセージをコピーまたは移動している場合は、日付順には並びません。自分でソートする必要があります。
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;

import javax.mail.Address;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.UIDFolder;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeUtility;

public class Main {

	public static void main(String[] args) {

		try {
		
			// http://connector.sourceforge.net/doc-files/Properties.html
			Properties props = System.getProperties();
			// セッション
			Session session = Session.getInstance(props, null);
			// IMAP で SSL を使用する
			Store imap4 = session.getStore("imaps");
	
			// 接続
			imap4.connect("さくらユーザ.sakura.ne.jp", 993, "ユーザ@さくらユーザ.sakura.ne.jp", "パスワード");
	
			System.out.println(imap4.getURLName().toString());
	
			// https://stackoverflow.com/questions/11435947/how-do-i-uniquely-identify-a-java-mail-message-using-imap
			Folder folder = imap4.getFolder("INBOX");
			UIDFolder uf = (UIDFolder)folder;
			folder.open(Folder.READ_ONLY);
	
			// 全てのメッセージ
			int totalMessages = folder.getMessageCount();
			System.out.println("Total messages = " + totalMessages);
	
			// 新しいメッセージ
			int newMessages = folder.getNewMessageCount();
			System.out.println("New messages = " + newMessages);
	
			// メッセージの一覧を取得
			Message[] msgs = folder.getMessages();

			// メッセージがコピー・移動されていると日付順とは限らない
			for (int i = msgs.length-1; i >= 0; i--) {
	
				// UID を取得
				Long messageId = uf.getUID(msgs[i]);
				System.out.println("UID = " + messageId);
				
				// From
				Address[] address = msgs[i].getFrom();
				String addressText = "";
				if (address != null) {
					// address[0].toString() のままでは正しく表示されない
					addressText = MimeUtility.decodeText(address[0].toString());
				}
				System.out.println("Address = " + addressText);
	
				// Subject
				String subjectText = MimeUtility.decodeText(msgs[i].getSubject());
				System.out.println("Subject = " + subjectText);
	
				// 受信日時
				Date date = msgs[i].getSentDate();
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
				String dateText = sdf.format(date);
				System.out.println("Date = " + dateText);
	
				// 本文(  UID より取得 )
				Message msg = uf.getMessageByUID(messageId);
				Part part = msg;
				String bodyText = "";
				if (part.isMimeType("text/plain")) {
					bodyText = part.getContent().toString();
				}
				else if (part.isMimeType("multipart/*")) {
					Multipart mp = (Multipart)part.getContent();
					// マルチパートの先頭
					bodyText = mp.getBodyPart(0).getContent().toString();
					
					if ( mp.getBodyPart(1).isMimeType("text/html") ) {
						String htmlText = mp.getBodyPart(1).getContent().toString(); 
						System.out.println("HtmlText = " + htmlText);
					}

					String filename = ((Part)mp.getBodyPart(1)).getFileName();
					// ファイル名があったら保存 
					if ( filename != null ) {
						System.out.println("ファイル名 = " + filename);
						File file = new File(filename);
						((MimeBodyPart)mp.getBodyPart(1)).saveFile(file);
					}

					// 3つ目がある場合
					if ( mp.getCount() > 2 ) { 
						filename = ((Part)mp.getBodyPart(2)).getFileName();
						// ファイル名があったら保存 
						if ( filename != null ) {
							System.out.println("ファイル名 = " + filename);
							File file = new File(filename);
							((MimeBodyPart)mp.getBodyPart(2)).saveFile(file);
						}
					}
				}
				
				System.out.println("Body = " + bodyText);
				
			}
	
			folder.close();
			imap4.close();
			
		} catch (Exception ex) {
			// handle any errors
			System.out.println("Exception: " + ex.getMessage());
		}
			
	}

}





posted by lightbox at 2018-10-24 16:29 | java : 通信関連 | このブログの読者になる | 更新情報をチェックする

2017年05月14日


OkHttp v3.8.0 jar( と okio 1.13.0.jar ) を Eclipse のプロジェクトに追加して一般的な POST 送信を行う

Android Studio では、Gradle に compile 'com.squareup.okhttp3:okhttp:3.8.0' を追加すれば済むと思いますが、Eclipse のプロジェクトでは、普通に lib フォルダを追加して、そこに二つを置いて右クリックから追加しました。



※ 右クリックから参照の追加をしないで、外部 jar の追加で処理すると、jar の場所が相対位置にならないので注意


OkHttp のダウンロード

OkHttp
An HTTP & HTTP/2 client for Android and Java applications


( 大きいのが OkHttp で下の小さいリンクが 依存ライブラリの okio です )

Javadoc

呼び出す WEB アプリ

結果が解りやすいので、メール送信です。

▼ リンク先にサンプルコードがあります
mb_send_mail を使用したメール送信テンプレート

POST メソッドで受け取った時のみ送信するようになっています。

Java のコード
import okhttp3.Call;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class Main {

	public static void main(String[] args) {

		// HTTP 処理用オプジェクト
		OkHttpClient client = new OkHttpClient();		

		// POST 用 FormBody の内容の作成
		FormBody.Builder formbodyBuilder = new FormBody.Builder();
		formbodyBuilder.add("to", "xxxxxx@gmail.com");
		formbodyBuilder.add("body", "日本語\r\n表示");
		formbodyBuilder.add("subject", "OkHttp で送信テスト");

		// 送信用ユニットの作成
		FormBody formbody = formbodyBuilder.build();

		// 送信用のデータを作成
		Request.Builder requestBuilder = new Request.Builder();
		String url = "http://localhost/lightbox/send_post_test.php";
		requestBuilder.url(url);
		requestBuilder.post(formbody);
		Request request = requestBuilder.build();

		// 受信用のオブジェクトの準備
		Call call = client.newCall(request);
		String result = "";

		// 送信と受信
		try {
			
			Response response = call.execute();
			result = response.body().string();
			
		} catch (Exception e) {
			e.printStackTrace();
		}

		// 受信結果の表示
		System.out.println(result);

	}

}

OkHttp では、メソッドの戻り値をオブジェクト自体にする事によって、チェーンするコードが書けるようになっていますが、イマいち直感的では無いので、それぞれのオプジェクト毎の記述で行っています。

▼ 以下は、ローカルに送った内容をトレースで記録したものです
POST /lightbox/send_post_test.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 150
Host: localhost
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/3.8.0

to=xxxxxx%40gmail.com&body=%E6%97%A5%E6%9C%AC%E8%AA%9E%0D%0A%E8%A1%A8%E7%A4%BA&subject=OkHttp%20%E3%81%A7%E9%80%81%E4%BF%A1%E3%83%86%E3%82%B9%E3%83%88


関連する記事

Android Studio : OkHttp v3.8.0 で WEBアプリに POST 送信を行う


タグ:OkHttp post
posted by lightbox at 2017-05-14 18:44 | java : 通信関連 | このブログの読者になる | 更新情報をチェックする

2016年04月03日


java をコマンドプロンプトからビルドして実行するサンプル。( メール送信が初心者には楽しいはず )

4月からの java の授業の開発環境は AndroidStudio がメインになりますが、コマンドプロンプトから地味に扱う方法や、Android では無いアプリの Eclipse での扱いも知って欲しいので昔のキットを引っ張り出して整備しています。

まずは、コマンドプロンプトから


※ 当然 JDK は必要です。あるという前提で。

ソース
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;

public class Main {

	// **********************
	// エントリポイント
	// **********************
	public static void main(String[] args) {
		Main thisClass = new Main();
	}

	// **********************
	// コンストラクタ
	// **********************
	public Main() {
		super();
		my_acton();
	}

	// **********************
	// 初期処理
	// **********************
	private void my_acton() {

		MyTool out = new MyTool(">>>");
		out.println("処理開始");

		// **********************
		// プロパティオブジェクトを作成
		// プロパティオブジェクトは、extends Hashtable(連想配列)
		// **********************
		Properties props = new Properties();
	
		// **********************
		// * 連想配列に送信用サーバのアドレスをセット
		// **********************

		// gmail の場合は、以下のリンクより、安全性の低いアプリの許可: 有効 に変更
		// https://myaccount.google.com/security?pli=1#connectedapps
		// props.put("mail.smtp.host","smtp.gmail.com");

		// 以下 Yahoo!
		props.put("mail.smtp.host","smtp.mail.yahoo.co.jp");

//		props.put("mail.smtp.port","587");	// サブミッションポート
		props.put("mail.smtp.auth", "true" );	// SMTP 認証を行う

		props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
		props.put("mail.smtp.socketFactory.fallback", "false");
		props.put("mail.smtp.socketFactory.port", "465");

		// **********************
		// メール用のセッションを作成
		// **********************
		SimpleAuthenticator sa =
			new SimpleAuthenticator("ユーザID","パスワード");
		Session MailSession = 
			Session.getInstance( props, sa );
	
		try {
	
			// **********************
			// メール用のメッセージオブジェクトを作成
			// **********************
			MimeMessage msg = new MimeMessage(MailSession);
	
			// **********************
			// 宛先
			// **********************
			msg.setRecipients(
				Message.RecipientType.TO,
				"メールアドレス"
			);
	
			// **********************
			// 送信者
			// **********************
			msg.setFrom(
				new InternetAddress( "ユーザID@yahoo.co.jp", "私です", "ISO-2022-JP")
			);
	
			// **********************
			// 件名
			// **********************
			msg.setSubject(
				MimeUtility.encodeText(
					"日本語件名",
					"iso-2022-jp",
					"B"
				)
			);
	
			// **********************
			// 本文
			// **********************
			msg.setContent(
				"本文\n本文",
				"text/plain; charset=\"iso-2022-jp\""
			);
	
			// **********************
			// 送信
			// **********************
			Transport.send( msg );
	
		}
		catch (Exception e) {
			out.println("送信エラー");
			e.printStackTrace();
		}

		out.println("処理終了");

	}

	// **********************
	// 内部用クラス
	// **********************
	private class MyTool {

		private String mark = null;

		MyTool(String pm) {
			mark = pm;
		}

		public void println(String str) {
			StringBuilder sb = new StringBuilder();
			sb.append(this.mark);
			sb.append(str);
			String s = sb.toString();		
			System.out.println( s );
		}

	}

	// **************************
	// 認証用のプライベートクラス
	// **************************
	private class SimpleAuthenticator extends Authenticator {
	
		private String user_string = null;
		private String pass_string = null;
	
		public SimpleAuthenticator( String user_s, String pass_s ) {
			super();
			user_string = user_s;
			pass_string = pass_s;
		}
	
		protected PasswordAuthentication getPasswordAuthentication(){
			return new PasswordAuthentication( this.user_string, this.pass_string );
		}
	}

}

Yahoo! メールと Gmail でテストしていますが、Gmail は 安全性の低いアプリの許可を『有効』にする必要があります。

mail.jar によるメールを送る為のビルド環境は同梱しています。java_build.wsf を実行していただくと、ビルド用のコマンドプロンプトが開きますが、前提として JDK の場所は指定していただく必要があります。

▼ __buildPath.txt
C:\Program Files\Java\jdk1.8.0_66\bin

; 行先頭にセミコロンはコメントです。
; また、一つでも有効な行を発見したら、それを使用して次の行以降は読み込みません
; なにも無い行は無視します
;
; ※ いろいろなバージョンをこれで切り替えて処理します
バージョンを切り替えたい場合はいくつも書いて、必要の無い行の先頭に ;(セミコロン)を入れます。 CLASSPATH の指定方法として、既に mail.jar の指定がされているので適宜変更します。 ▼ __classPath.txt
.;..\mail.jar

; 行先頭にセミコロンはコメントです。
; また、一つでも有効な行を発見したら、それを使用して次の行以降は読み込みません
; なにも無い行は無視します
;
..mail.jar になっているのは、__targetPath.txt の指定で、カレントが javamail フォルダになっており、そこからの相対位置になる必要があるからです。 実行 java_start.wsf を実行しますが、__java_start.txt の中に書いた内容が1行づつ実行されます
java Main
pause
exit
※ その他は、readme.txt を参照して下さい
タグ:java
posted by lightbox at 2016-04-03 21:01 | java : 通信関連 | このブログの読者になる | 更新情報をチェックする

2015年05月04日


Eclipse + JFace : HttpURLConnection で GET

やりたい事は簡単でも、環境からの説明を入れると長くなってしまうので、それぞれの要点部分は他から参照するようにしています。

対象とする URL は、PHP で作成した簡易掲示板です。この簡易掲示板は、Google Chrome で開いた時のみ簡易掲示板として働きます。それ以外では 簡易的な JSON の文字列で掲示板用のデータを返します。Google Chrome でも、モバイルモードで、デバイス無しで UA を適当に文字列入れると JSON で表示します。

Java で Window プログラムをテストするのに、Vector で配布されている自己解凍式の Pleiades を使い、Window Builder ですぐボタンとそのイベントコードまでが作成されます。後は、そのイベントからここにあるクラスを作成して呼び出すだけです。

このクラスは、元々は Android 用に作ったもので、リンク先には POST もあります。

ここでは、まだ実装していませんが、この後 Google gson を使って JSON データを利用する事になります。

プロジェクト作成からボタン作成まで

日本語 Eclipse 4.4 Pleiades All in One Java(Vector から) で即 Window Builder


HttpGet クラス

※ セッション対応した、HttpGet と HttpPost はこちらから
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;


public class HttpGet {

	// **********************************************
	// URL と charset の初期値
	// **********************************************
	private String initTargetUrl = "http://toolbox.winofsql.jp/log.php";
	private String initTargetCharset = "utf-8";

	// **********************************************
	// コンストラクタによって初期値が違います
	// **********************************************
	public HttpGet() {
	}
	public HttpGet(String targetUrl) {
		initTargetUrl = targetUrl;
	}
	public HttpGet(String targetUrl,String targetCharset) {
		initTargetUrl = targetUrl;
		initTargetCharset = targetCharset;
	}

	// **********************************************
	// コンストラクタで指定した URL と charset で処理
	// **********************************************
	public String execute() {
		return execute(initTargetUrl,initTargetCharset);
	}

	// **********************************************
	// 指定した URL へ 任意の charset で処理
	// **********************************************
	public String execute(String targetUrl,String targetCharset) {

		StringBuffer web_data = new StringBuffer();

		try {

			// **********************************************
			// インターネットへの接続
			// **********************************************
			// 読み込む WEB上のターゲット
			URL url = new URL(targetUrl);
			// 接続オブジェクト
			HttpURLConnection http = (HttpURLConnection)url.openConnection();
			// GET メソッド
			http.setRequestMethod("GET");
			// 接続
			http.connect();

			// **********************************************
			// ストリームとして読み込む準備
			// **********************************************
			// 以下読み込み3点セット InputStream / InputStreamReader / BufferedReader
			InputStream input_stream = http.getInputStream();
			// UTF-8 でリーダーを作成
			InputStreamReader input_stream_reader = new InputStreamReader(input_stream, targetCharset);
			// 行単位で読み込む為の準備
			BufferedReader buffered_reader = new BufferedReader(input_stream_reader);

			// **********************************************
			// 行の一括読みこみ
			// **********************************************
			String line_buffer = null;
			// BufferedReader は、readLine が null を返すと読み込み終了
			while ( null != (line_buffer = buffered_reader.readLine() ) ) {
				// コマンドプロンプトに表示
				web_data.append( line_buffer );
				web_data.append( "\n" );
			}

			// **********************************************
			// 接続解除
			// **********************************************
			http.disconnect();
		}
		catch(Exception e) {
			// 失敗
			System.out.println( e.getMessage());
		}
		return web_data.toString();
	}

}

読み出す URL 部分には、以下のページで紹介している内容を使用しています。

PHP による『超簡易掲示板』 / アプリケーションからの POST 検証用


本来は localhost に設置して Google Chrome でデータを登録した結果を JSON で取得するように作成されています

localhost の構築は、以下で説明している 『AN HTTP Server』を使用すると簡単です

実運用では無く、学習用の WWWサーバーとしてはこれ以外に無い『AN HTTP Server』ですが、古いソフトなので使い方にコツがあります


読み出し部分
	/**
	 * Create contents of the application window.
	 * @param parent
	 */
	@Override
	protected Control createContents(Composite parent) {
		Composite container = new Composite(parent, SWT.NONE);
		container.setLayout(null);
		{
			Button btnNewButton = new Button(container, SWT.NONE);
			btnNewButton.addSelectionListener(new SelectionAdapter() {
				@Override
				public void widgetSelected(SelectionEvent e) {
					System.out.println("ボタンの処理");
					HttpGet hg = new HttpGet();
//					String result = 
//							hg.execute(
//									"http://localhost/basic/log_01/log.php",
//									"utf-8"
//									);
					String result = hg.execute();
					System.out.println(result);
				}
			});
			btnNewButton.setBounds(10, 10, 81, 28);
			btnNewButton.setText("New Button");
		}

		return container;
	}
localhost で行った実行結果は以下のようになっています。


 

Eclipse で、コメントのオン・オフは、行を選択して CTRL + / です。

▼ localhost を Google Chrome で開いたものです。



posted by lightbox at 2015-05-04 16:35 | java : 通信関連 | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり