proになるJava 第12章
・多くのプログラムでは、データを外から受け取り、処理結果をプログラムの外に出力する必要があります。
プログラムで想定してないデータがやってきた場合などに例外として対応する場合の処理を見ていきます。
ファイルへの保存を行います。
sample code
projava/Writefile.java
package projava;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
public class WriteFile {
public static void main(String[] args) {
var message = """
test
message
""";
var p = Path.of("test.txt");
Files.writeString(p, message);
}
}
Pathでファイル名を指定します。今回は「test.txt」という名前にします。
var p = Path.of("test.txt");
Files.WriteStringメゾッドを使い、ファイルに文字列を保持します。
Files.writeString(p, message);
最初の引数(p)が保存位置、2番目の引数(message)が書き込む文字列です。
実行するとsrcフォルダなどと同じ階層にtest.txtファイルができています。
ファイルを書き込んだので今度は読み込みます。
sample code
projava/ReadFile.java
package projava;
import java.io.IOException;
import java.nio.file.NoSuchFileException;
import java.nio.file.Path;
import java.nio.file.Files;
public class ReadFile {
public static void main(String[] args) throws IOException {
var p = Path.of("test.txt");
String s = Files.readString(p);
System.out.println(s);
}
}
test.txtファイルを作成した状態で実行すると以下の様に表示されます。
実行結果_________
test
message
________________
ファイルの内容を変更していると、その内容が反映されます。
ファイルの内容を文字列として読み込むときにはFiles.readStringメゾッドを使います。
String s = Files.readString(p);
_
例外について
例外は「プログラムを動かしたら正しく動作できなかった」ということを表す仕組みです。
例外について見ていきます。
ReadFileサンプルで読み込むファイル名を「test.txta」に変更して実行してみます。
var p = Path.of("test.txta");
NoSuchFileExceptionエラーになります。
ファイルが見つからなかった場合の処理を行います。
try句を使います。
例外が発生するかもしれない処理を「try{}」で囲んで、発生する例外についてcatch句で指定して処理します。
try {
var p = Path.of("test.txta");
String s = Files.readString(p);
System.out.println(s);
} catch (NoSuchFileException e) {
System.out.println("ファイルが見つかりません:" + e.getFile());
}
_
try{
例外が発生するかもしれない処理
} catch (捕まえる例外1 変数){
例外の処理
} catch (捕まえる例外2 変数){
例外の処理
}...
今回はNoSuchFileExceptionに対処するので、catch句で指定しています。
発生した例外を「e」という変数で扱える様にしています。
catch (NoSuchFileException e) {
例外NoSuchFileExceptionでは、getFileメゾッドで見つからなかったファイル名を
得ることが出来るので、ここで表示します。
System.out.println("ファイルが見つかりません:" + e.getFile());
例外が発生してもしなくても行いたい処理がある場合にはfinallyブロックを書きます
try{
例外が発生するかもしれない処理
} catch (捕まえる例外1 変数){
例外の処理
} finally {
例外が発生してもしなくても行われる処理
}...
_