このページには、以下のサンプルを掲載しています。
下の項目をクリックをすると各サンプルにジャンプします。
※2週間以内の新着記事はNewアイコン、更新記事はUpアイコンが表示されます。
■アプレットからのファイル読み込み
[ サンプルプログラムのソースコード - ReadFileSample01.java - ]
- import java.awt.Graphics;
- import java.awt.Graphics2D;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.net.URLConnection;
- import java.util.ArrayList;
- import java.util.List;
- import javax.swing.JApplet;
- public class ReadFileSample01 extends JApplet {
- private static final long serialVersionUID = 1L;
- private List lines;
- public void init() {
- try {
- lines = new ArrayList<String>();
- URL url = new URL(getCodeBase() + "test.txt");
- URLConnection urlc = url.openConnection();
- InputStreamReader isr = new InputStreamReader(urlc.getInputStream());
- BufferedReader br = new BufferedReader(isr);
- String line;
- while ( ( line = br.readLine() ) != null ) {
- lines.add(line);
- }
- } catch ( MalformedURLException e ) {
- e.printStackTrace();
- } catch ( IOException e ) {
- e.printStackTrace();
- }
- }
- public void paint(Graphics g) {
- Graphics2D g2 = (Graphics2D)g;
- int w = getWidth();
- int h = getHeight();
- g2.clearRect(0, 0, w, h);
- int y = 10;
- for ( String line : lines ) {
- g2.drawString(line, 5, y);
- y += 15;
- }
- }
- public void update(Graphics g){
- paint(g);
- }
- }
|
[ サンプルプログラムの実行結果 ]
実行結果を見るには下のボタンをクリックしてください。
※実行結果は、別ウィンドウで開きます。実行には時間がかかることがありますのでご注意ください。
アプレットから読み込んでいるファイルはこれ↓
https://syunpon-java.com/programing/java/sample/applet/fileaccess/test.txt
[ サンプルプログラムの解説 ]
アプレットからファイルを読み込むには、まずファイルのURLを指定してURLオブジェクトを生成します。(23行目)
getCodeBase() で実行しているアプレットが存在するURLを取得しています。
getCodeBase()で得られたURLとファイル名(getCodeBase()からの相対パス)を連結してファイル名のURLを新しく生成します。
この時、URLが不正な形式だった場合、MalformedURLExceptionがスローされます。そのためこの行をtry〜catchで囲っています。
生成したURLオブジェクトからopenConnection()メソッドを使ってURLConnectionオブジェクトを取得します。(24行目)
URLConnectionオブジェクトからInputStreamReader、BufferedReaderなどを使って入力ストリームを生成します。(23、24行目)
入力ストリームからファイルの読み出しをおこないます。サンプルでは、読み出したファイルの内容をリストに格納しています。(26〜28行目)
■キャッシュさせないファイル読み込み
アプレットからファイルを読み込む場合、読み込みファイルの内容を更新しても読み込み内容が変わらない場合があります。
これは、ブラウザなどのキャッシュが利用されサーバ上のファイルを読みにいかないためです。これを回避するには、URLオブジェクト
生成時にダミーのパラメータ文字列を渡してブラウザに別ファイルであると認識させると言う方法があります。
ブラウザをだますわけですね(^^;
以下、キャッシュをさせないでファイルを読み込むサンプルになります。
[ サンプルプログラムのソースコード - ReadFileSample02.java - ]
- import java.awt.Graphics;
- import java.awt.Graphics2D;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.net.URLConnection;
- import java.util.ArrayList;
- import java.util.List;
- import javax.swing.JApplet;
- public class ReadFileSample02 extends JApplet {
- private static final long serialVersionUID = 1L;
- private List lines;
- public void init() {
- try {
- lines = new ArrayList<String>();
- URL url = new URL(getCodeBase() + "test.txt" + "?c="
- + Calendar.getInstance().getTimeInMillis());
- URLConnection urlc = url.openConnection();
- InputStreamReader isr = new InputStreamReader(urlc.getInputStream());
- BufferedReader br = new BufferedReader(isr);
- String line;
- while ( ( line = br.readLine() ) != null ) {
- lines.add(line);
- }
- } catch ( MalformedURLException e ) {
- e.printStackTrace();
- } catch ( IOException e ) {
- e.printStackTrace();
- }
- }
- public void paint(Graphics g) {
- Graphics2D g2 = (Graphics2D)g;
- int w = getWidth();
- int h = getHeight();
- g2.clearRect(0, 0, w, h);
- int y = 10;
- for ( String line : lines ) {
- g2.drawString(line, 5, y);
- y += 15;
- }
- }
- public void update(Graphics g){
- paint(g);
- }
- }
|
[ サンプルプログラムの解説 ]
サンプルのプルグラムは、最初のサンプル
「アプレットからのファイル読み込み」とほとんど同じです。
違うのは、23、24行目の赤字部分で、読み込みファイル名の後ろにダミーのパラメータを渡しています。ダミーのパラメータは、読み込む度に
違う文字列になっていればなんでもかまいません。このサンプルでは、実行環境のシステム時刻のミリ秒表現を使っています。