#はじめに
プログラムの処理結果をファイルに出力するときなど、実行環境のデフォルトの改行コード以外を指定する必要があることがあります。コマンドラインパラメータやプロパティファイルなどで「LF」「CRLF」などの記号で指定し、受け取ったプログラムでは指定された記号に応じた改行文字列「\n」「\n\r」に割り当てるような処理を書いていましたが、enumにまとめられることに気づきました。
#実装したenum NewLine
enumデフォルトのvalueOf(String name)メソッドだと、指定されたnameに該当するものがないと
java.lang.IllegalArgumentException: No enum constant NewLine.XXX
のような例外が投げられるので、get(String name)メソッドを用意しました。
NewLine.java
public enum NewLine {
CR("\r"),
LF("\n"),
CRLF("\r\n"),
DEFAULT(System.lineSeparator());
private final String value;
private NewLine(String value) {
this.value = value;
}
public String getValue() {
return value;
}
static NewLine get(String name) {
try {
return valueOf(name);
}
catch (IllegalArgumentException | NullPointerException ignore) {}
return DEFAULT;
}
}
###使用例
改行をプロパティに指定するイメージです。NewLine enumのどれかをプロパティに指定し、それをWriterのwriteメソッドで使うというサンプルです。
NewLineTest.java
public class NewLineTest {
static Properties prop;
@BeforeClass
static public void init() {
prop = new Properties();
prop.setProperty("newline", "LF");
}
@Test
public void test() throws Exception {
NewLine EOL = NewLine.get(prop.getProperty("newline"));
StringWriter writer = new StringWriter();
writer.write("line");
writer.write(EOL.getValue());
System.out.print(writer);
}
}