Java StreamAPIやってみる
- #Java
- #Tips
- #Know-how
- 2018/03/30
サンプルコード
Java8で追加されたStreamApiを使用してファイルの読み込みと書き出しを行ってみました。
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
/**
* Streamのサンプル<br />
* 文字コードはUTF-8で設定(Shift_jisでは参照不可)
*/
public class SampleStream {
/** 読込パス */
private static final String INPUT_PATH = "C:\\temp\\in.txt";
/** 出力パス */
private static final String OUTPUT_PATH = "C:\\temp\\out.txt";
public static void main(String[] args) throws Exception {
// FileSystemを取得
FileSystem fs = FileSystems.getDefault();
// ファイルのパスを設定
Path path = fs.getPath(INPUT_PATH);
// 出力用のパスを設定
Path out = fs.getPath(OUTPUT_PATH);
// 読み込み方その1
// Files.linesを使用して読み込む
try (Stream<String> stream = Files.lines(path, StandardCharsets.UTF_8)) {
stream.filter(s -> s.contains("link")).map(s -> s.replace("html", "form"))
.map(s -> s.replace("action", "href")).forEach(System.out::println);
} catch (IOException e) {
System.out.println("error");
}
// 読み方その2
// Files.readAllLinesを使用して読み込む
List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);
List<String> output = new ArrayList<String>();
lines.stream().filter(s -> s.contains("link")).forEach(s -> output.add(s));
// 抽出したデータをListに詰めてテキストに出力
Files.write(out, output, StandardCharsets.UTF_8, StandardOpenOption.APPEND);
// 出力したデータを拡張for文で出力して確認
for (String put : output) {
System.out.println(put);
}
}
}
- 文字コードはUTF-8しかサポートしていないらしくShift_Jisで読み込もうとすると例外が投げられます。
Share:
X (Twitter)