以下は指定された仕様に基づいて作成されたJavaプログラムのサンプルコードです。Java 1.8で動作することを前提としています。
import java.io.*;
import java.util.*;
public class CsvFileProcessor {
public static void main(String[] args) {
// コマンドライン引数からCSVファイルのパスを取得
if (args.length != 1) {
System.out.println("使用法: java CsvFileProcessor <CSVファイルパス>");
return;
}
String inputFilePath = args[0];
String outputFilePath = new File(inputFilePath).getParent() + File.separator + "output.csv";
try (
BufferedReader reader = new BufferedReader(new FileReader(inputFilePath));
BufferedWriter writer = new BufferedWriter(new FileWriter(outputFilePath))
) {
String line;
// 1行ずつ読み込み処理
while ((line = reader.readLine()) != null) {
// CSVファイルの項目を分割
List<String> record = new ArrayList<>(Arrays.asList(line.split(",")));
// 5項目目(インデックス4)が存在する場合に編集
if (record.size() > 4) {
record.set(4, "12345678");
}
// 編集後のレコードを出力用ファイルに書き込み
writer.write(String.join(",", record));
writer.newLine();
}
System.out.println("編集されたCSVファイルを以下に出力しました: " + outputFilePath);
} catch (FileNotFoundException e) {
System.out.println("指定されたCSVファイルが見つかりません: " + inputFilePath);
} catch (IOException e) {
System.out.println("ファイルの読み書き中にエラーが発生しました: " + e.getMessage());
}
}
}
プログラムの説明
- CSVファイルの読み込み:
BufferedReaderを使用して1行ずつCSVファイルを読み込みます。- レコードは行ごとに
split(",")で分割して、リスト形式で管理します。
- エラー処理:
List<String>を使用してレコードを管理することで、項目数が異なる場合でも安全に処理を行います。
- 5項目目の編集:
record.set(4, "12345678");で、インデックス4(5項目目)の値を指定の値に編集します。- 項目数が4以下でも問題が発生しないロジックになっています。
- 編集後のCSVファイルの出力:
BufferedWriterを使用して、編集された内容を新しいCSVファイルに書き込みます。- 出力先のファイル名は
output.csvとし、入力ファイルと同じフォルダに保存します。
注意点
- CSVファイルのフォーマット:
- このコードでは、項目の区切り文字を
","として扱っています。特殊な区切り文字が使用されている場合は、その対応が必要です。
- エラー処理:
- ファイルが存在しない場合や読み書き中のエラーを処理しています。
- Java 1.8対応:
- Java 1.8で動作する標準ライブラリのみを使用しています。
このコードを保存してコンパイルするには、例えばファイル名をCsvFileProcessor.javaとして保存してください。その後、コンパイルして以下のように実行します:
javac CsvFileProcessor.java
java CsvFileProcessor path/to/input.csv
これにより、編集後のCSVファイルがoutput.csvとして保存されます。

コメント