概要
「1.4」で止まってたJavaの知識をバージョンアップするため
Java7,8,9について学習しています。
今回は「7」で追加された機能について調べた事のみを記載します。
調べたこと
ダイヤモンド演算子
インスタンス生成時にジェネリクスを省略できるようになりました。
List<Map<String, List<String>>> gyunyu = new ArrayList<>();
NIO2
ファイルシステム関連のAPIが追加されました。
ファイルの読み込み
try {
Path path = Paths.get("gyunyu.txt");
List<String> list = Files.readAllLines(path, Charset.forName("UTF-8"));
for (String gyunyu : list) {
System.out.println(gyunyu);
}
} catch(IOException e) {
e.printStackTrace();
}
ファイルの書き込み
try {
List<String> list = new ArrayList<>();
list.add("レモン牛乳");
Path path = Paths.get("gyunyu.txt");
Files.write(path, list, Charset.forName("UTF-8"), StandardOpenOption.APPEND);
} catch (IOException e) {
e.printStackTrace();
}
java.nio.file.Path
インタフェース。ファイルまたはディレクトリのパスを特定するために使用できるオブジェクト-
java.nio.file.Paths
Pathオブジェクトを生成するためのクラス-
Paths.get(URI uri)
: 指定された URI を Path オブジェクトに変換
-
-
java.nio.file.Files
ファイルまたはディレクトリに関する処理を集めたクラス-
Files.readAllLines(Path path, Charset cs)
: ファイルからすべての行を読み取る -
Files.write(Path path, Iterable<? extends CharSequence> lines, Charset cs, OpenOption... options)
: テキスト行をファイルに書き込む
-
-
java.nio.file.StandardOpenOption
ファイルの操作方法が定義されている列挙型のクラス-
StandardOpenOption.APPEND
: ファイルの先頭ではなく最後に書き込む
-
try-with-resources
try-with-resources
文を使う事で、ファイル・データベースへのアクセスで記述していたclose()
を書かなくて良くなりました。
記述し忘れによるメモリリーク防止、ちょっとだけ手間が省けるようになりました。
try(BufferedReader reader = new BufferedReader(new FileReader("gyunyu.txt"))) {
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
java.lang.AutoCloseable
かjava.io.Closeable
インターフェースを実装するクラスであれば、try-with-resources
文が使えます。
public class Gyunyu implements AutoCloseable {
public void make() {
System.out.println("コーヒー");
}
@Override
public void close() throws Exception {
System.out.println("牛乳 !!!");
}
}
try (Gyunyu gyunyu = new Gyunyu()) {
gyunyu.make();
} catch (Exception e) {
e.printStackTrace();
}
gyunyu.close()
のように呼び出さなくてもclose()
が実行されています。
複数の例外をcatch
Java6までは下記のように書いていましたが、
try {
} catch (IllegalArgumentException e) {
} catch (NullPointerException e) {
}
Java7からは下記のようにまとめて記述する事が出来る。
try {
} catch (IllegalArgumentException | NullPointerException e) {
}
switch文でStringの判定
switch文でStringを使用できるようになりました。
「1.4」まではint
だけ、「5」からenum
も判定に使用できるようになり、
「7」からStringでも判定できるようになりました。
以前からStringで判定できると思ってた・・・
String s = "coffee";
switch (s) {
case "ichigo":
System.out.println("ICHIGO GYUNYU !!!");
break;
case "coffee":
System.out.println("COFFEE GYUNYU !!!");
break;
}