【Java】TSVをCSVに変換するやつ

Java学習中なので何となく…
タブ区切りのデータをカンマ区切りにするアレを作ってみました。

VSCodeを使っていたり、ろくに参考書も読まずにコーディングしているので
かなり汚いです。

コード

import java.io.*;
import java.util.*;

public class Tsv2Csv
{
    public static void main(String[] args) throws FileNotFoundException
    {
        if (args.length != 2) {
            return;
        }

        String readFileName = args[0];
        String createFileName = args[1];

        // ファイル読み込み
        List<String[]> list = ReadFile(readFileName);

        // CSVファイル作成
        CreateCsv(createFileName, list);

        return;
    }

    /**
     * ReadFileメソッド 指定したファイルのデータを取得する。
     * 
     * @param readFileName 読み込みファイル名
     * @return ファイルデータ
     */
    public static List<String[]> ReadFile(String readFileName)
    {
        List<String[]> list = new ArrayList<String[]>(0);

        try {
            int i = 0;
            File f = new File(readFileName);
            
            String str = null;

            BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(f), "UTF-8"));

            while((str = br.readLine()) != null){
                String data = str;

                String[] tmpArray = data.split("\t");
                for (i = 0; i < tmpArray.length; i++) {
                    tmpArray[i] = "\"" + tmpArray[i] + "\"";
                }
                list.add(tmpArray);
            }

            br.close();
        } catch (Exception e) {
            return null;
        }

        return list;
    }

    /**
     * CreateCsvメソッド CSVファイルを作成する。
     * 
     * @param createFileName 出力ファイル名
     * @param list           出力データ
     * @return ファイル作成成功:true, 失敗:false
     */
    public static boolean CreateCsv(String createFileName, List<String[]> list)
    {
        try {
            PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(createFileName), "UTF-8")));
            for (String[] tmpStringArray : list) {
                pw.println(String.join(",", tmpStringArray));
            }

            pw.close();
        } catch (Exception e) {
            return false;
        }

        return true;
    }
}

入力データ

みんな大好き意地悪データも入ってます。(∩´∀`)∩

1   2   ho"ge   test    5
1   2,  hoge    te\rst  6👉
"1  2   ho①ge   te's\t  5
1   2㈱  hoge    te((((oノ´3`)ノst 5\r\n

実行結果(出力ファイル)

かなり見づらいけど、変換できてます。

"1","2","ho"ge","test","5"
"1","2,","hoge","te\rst","6👉"
""1","2","ho①ge","te's\t","5"
"1","2㈱","hoge","te((((oノ´3`)ノst","5\r\n"

(´-`).。oO(完成と思ったら、意地悪データを入れた後に色々と崩壊した感じ…

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください