ファイルから入力で作成したFileRead.javaのファイルを行ごとに読むプログラムを変更してサーバー上のテキストファイルを読めるようにします。
URLの扱いをjavaがすべて裏でやってくれるので、とても簡単です。
/** 指定された URLのファイルからテキストデータを読み込む */ import java.io.*; import java.net.*; public class URLFileRead { public static void main( String[] args ) { try { URL url = new URL( args[0] ); Object content = url.getContent(); if( content instanceof InputStream ) { InputStreamReader in = new InputStreamReader((InputStream)content); BufferedReader inb = new BufferedReader(in); String line; while( ( line = inb.readLine() ) != null ){ System.out.println( line ); } inb.close(); in.close(); } else{ System.out.println( "このデータは " + content.toString() ); } } catch( ArrayIndexOutOfBoundsException e ){ System.err.println( "Usage: java URLFileRead url" ); } catch( IOException e ){ System.err.println( args[0] + "がちがいませんか?" ); } } }
次のように使います。
java URLFileRead http://www.st.seiai.ed.jp/index.html
これでhtmlファイルが読み出され、文字として表示されます。
ただし、文字コードの変換をしていないので、文字コードがあっていないファイルは文字化けします。最近のLinuxではUTF-8、昔のLinuxならEUC-JP、WindowsならShift_JISであることが多いのですが,ほとんどのエディタでは保存時の文字コードを選択できます。
たとえば、次のページはUTF-8で書かれています。
java URLFileRead http://www.st.seiai.ed.jp/t2008/java/index.html
URLはローカルなファイルも指定できます。javaプログラムが入っているディレクトリにはMondai.txtというファイルがあるはずです。
$ java URLFileRead file:Mondai.txt
本校の場合ユーザー名がhogeならばこれは次のように書いたものと同じです。
$ java URLFileRead file:///home/hoge/user/java/Mondai.txt
上記プログラムと全く同等です。if( content instanceof InputStream ) の部分を省略して見通しをよくしました。URLで示されたものが InputStream でなかった時には例外が生じるので if であらかじめチェックするというものですが、あきらめる以上のことをしていないので、try catch に任せてしまおうというものです。
加えて、if( content instanceof InputStream ) に期待する働きが十分でなく、文字列でない Stream も開いてしまうことがありますので、それならわかりやすく事前チェックをしないようにしようというものです。
/** 指定された URLのファイルからテキストデータを読み込む */
import java.io.*;
import java.net.*;
public class URLFileRead2 {
public static void main( String[] args ) {
try {
URL url = new URL( args[0] );
InputStream strm = url.openStream();
InputStreamReader in = new InputStreamReader(strm);
BufferedReader inb = new BufferedReader(in);
String line;
while( ( line = inb.readLine() ) != null ){
System.out.println( line );
}
inb.close();
in.close();
}
catch( ArrayIndexOutOfBoundsException e ){
System.err.println( "Usage: java URLFileRead url" );
}
catch( IOException e ){
System.err.println( args[0] + "がちがいませんか?" );
}
}
}