5月12日

ストリーム

try-with-resources文

Java7では try-with-resources文が追加されました。try-with-resources文は、try-catch構文の中でストリームを使ったときに、ストリームのcloseに関するコードが煩雑になってしまいます。try-with-resources文を使用することで、煩雑さを解消できます。

try-with-resources文の構造は以下のとおりです。

    try ( 構文から出たときにクローズしたいリソース ) {
        // リソースを扱う処理
    }

クローズしたいリソースの中で使用できるオブジェクトは、java.lang.AutoCloseable インタフェースを実装しているものです。

以下のコードは、try-with-resources文を使用した例です。

package abc;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class CloseSample2 {

	public static void main(String[] args) {
		String path = "hoge.txt";
		try (BufferedReader r = new BufferedReader(new FileReader(path))) {
			while (true) {
				String s = r.readLine();
				if (s == null) break;
				System.out.println(s);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

その他、詳しくはOracleのドキュメントを参照してください。→ try-with-resources文

Webページのコピー(ファイル以外の例)

LIST 24-08 DownloadSample.java

package c24;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;

public class DownloadSample {

	public static void main(String[] args) throws IOException {
		String dest = "dest.html";
		URL url = new URL("http://www.yahoo.co.jp/");
		InputStream in = url.openStream();
		OutputStream out = new FileOutputStream(dest);
		int len;
		byte[] b = new byte[1024];
		while (true) {
			len = in.read(b);
			if (len < 0) break;
			out.write(b, 0, len);
		}
		in.close();
		out.close();
	}
}

DownloadSampleを実行すると、YahooのトップページのHTMLがdest.htmlに出力される。ブラウザでdest.htmlを開くと、Yahooのトップページを表示できる。

dest.htmlを右クリックし、[次で開く]-[Webブラウザー]を選択すれば、Eclipse内でブラウザが動作する。

open

Fileクラス

LIST 24-09 FileSample.java を作成して実行する。Fileコンストラクタに渡すパスは、"."にする。

LIST 24-09 に、以下の変更を行う。

  • ディレクトリの場合は絶対パスを表示する
  • ファイルの場合はファイル名のみを表示する
  • 可能であれば、ディレクトリの階層に応じてインデントする
C:\All-in-One-Eclipse4.3\workspace\c24\.
  .classpath
  .project
C:\All-in-One-Eclipse4.3\workspace\c24\.\.settings
    org.eclipse.jdt.core.prefs
C:\All-in-One-Eclipse4.3\workspace\c24\.\bin
C:\All-in-One-Eclipse4.3\workspace\c24\.\bin\c24
      CloseSample.class
      CloseSample2.class
      DownloadSample.class
      FileCopy.class
      FileSample.class
      InputSample.class
      OutputSample.class
      ReaderSample.class
      WriterSample.class
      WriterSample2.class
  btest.bin
  dest.html
  hoge.txt
  hoge2.txt
C:\All-in-One-Eclipse4.3\workspace\c24\.\src
C:\All-in-One-Eclipse4.3\workspace\c24\.\src\c24
      CloseSample.java
      CloseSample2.java
      DownloadSample.java
      FileCopy.java
      FileSample.java
      InputSample.java
      OutputSample.java
      ReaderSample.java
      WriterSample.java
      WriterSample2.java

さらにFileクラスを使う

コマンドプロンプトの dir コマンドと同様の出力をするクラス Dir を作成する。Dirを実行すると、以下のような出力結果が得られるようにする。

2014/05/08  11:30		301	.classpath
2014/05/08  11:30		379	.project
2014/05/08  11:30	<DIR>		.settings
2014/05/08  11:32	<DIR>		bin
2014/05/08  12:10		3	btest.bin
2014/05/12  10:32		22156	dest.html
2014/05/08  12:03		59	hoge.txt
2014/05/08  12:55		59	hoge2.txt
2014/05/08  11:32	<DIR>		src

参考画像

dir

[PR] 北九州カレーフェスティバル

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です