テキストファイルの読み書き
数値は文字列に変換してから書込まないとおかしなことになる。
指定したファイルが見つかればそのファイルの内容は上書きされる。
(new FileWriter( "ファイル名", true ) とすると追記)
ファイルがなければ指定したファイル名で自動作成される。
読込でファイルが見つからないと何も読込めないので極力例外処理を記述する。
ここでの読込は基本的な1文字ずつ取り出す方法を使っている。
この他にCSV形式やXML形式なども使える。詳細は知らん
今回 "save.dt" というファイル名で書込している。中身はテキストファイルなので右クリックして「プログラムから開く」→「メモ帳」などのエディタで中身が見れる。
メモ帳で編集できるので内容を改ざんされたくない場合は暗号化する。詳細は知らん
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
// import文は package の下に書くよ!
// ・・・class, main() 省略
// 書込データ準備
ArrayList data = new ArrayList<>();
data.add( "abcd" ); data.add( "efg" ); data.add( "hijkl" );
data.add( "mno" ); data.add( "pqrst" ); data.add( "uvwxyz" );
// ファイルに data の中身を全部書込むよ! -----------------------------------------------
// 相対パスにする場合はプロジェクトフォルダ直下(srcフォルダの上)から始まる
try ( FileWriter fw = new FileWriter( "save.dt" ); ) {
for( String s : data ) { // データを順次 stream へ
fw.write( s + "\n" ); // 改行で区切る場合
}
fw.flush(); // stream に残っているようなら強制的に書込
} catch ( IOException e ) {
System.out.println( "ファイル書込中に例外が発生しました" );
}
// ファイルの内容を全部読込んで出力するよ! -----------------------------------------
// 読込用リスト
ArrayList s = new ArrayList<>();
try ( FileReader fr = new FileReader( "save.dt" ); ){
// 一文字読む
int rd = fr.read();
String str = ""; // 1行読込用 空文字で初期化しないと null が混ざる!
while( rd != -1 ) { // // -1 のときファイルの終端なのでループを抜ける
if( rd == '\n' ) { // int == char ができる!
s.add( str ); // 改行なので '\n' は含めずリストに格納
str = ""; // "" で初期化して次の行
} else {
// ※重要 char にキャストしてから文字列につなげる
// キャストしないとASCIIコード等が文字列に入る
str += ( char )rd;
}
rd = fr.read();
}
} catch( IOException e ) {
System.out.println( "ファイルが見つからないか読込中に例外が発生しました" );
}
// 読込終了 数値として扱いたいものは型変換する
for( String str : s ) {
System.out.println( str );
}