[Java] 52 JavaFX 10 文字コード変換ツール その3 完成

一応完成しました。

昨年2020年9月にGUIアプリではないですがPython&Bashで同じことができるコードを書いています。nkfコマンドを使えばファイルの文字コード変換は楽勝です。

こちらの方の難易度は桁違いに高かったです。

あとはjar実行ファイルに変換して普段使いできるようにします。

先月下旬にVScodeでのJavaツール開発を諦めてEclipseへ移行してから1ヶ月余り。ようやくVScodeでも開発できるようになりました。XcodeやEclipseのようなIDEはなにか窮屈で書かされている感もあり苦手です。

package javafx_conv;

import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.event.ActionEvent;
import java.util.regex.Pattern;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;

public class GuiController {
    @FXML
    private Button button1;
    @FXML
    private Button button2;
    @FXML
    private TextField text1;
    @FXML
    private TextField text2;

    String path;
    String path2;
    String code;
    String code2;

    @FXML
    void onButton1Action(ActionEvent event) {
        code2 = text2.getText();
        System.out.println(code2);

        path2 = text1.getText();
        System.out.println(path2);

        if(code2.matches("UTF-8")){
            // 変換後のファイル名を作成
            StringBuffer buf = new StringBuffer();
            buf.append(path2.split(Pattern.quote("."))[0]);
            buf.append("_s.");
            buf.append(path2.split(Pattern.quote("."))[1]); // 拡張子
            String s = buf.toString();
            System.out.println(s);

            // ファイルの文字コードをUTF-8からシフトJISに変換
            File file = new File(path2);
            File file2 = new File(s);
            try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"));BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file2),"Shift-JIS"))){
                String line;
                while ((line = br.readLine()) != null) {
                    System.out.println(line);

                    bw.write(line);
                    bw.newLine();
                }
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }
        else{
            if(code2.matches("SHIFT_JIS")){
                // 変換後のファイル名を作成
                StringBuffer buf = new StringBuffer();
                buf.append(path2.split(Pattern.quote("."))[0]);
                buf.append("_u.");
                buf.append(path2.split(Pattern.quote("."))[1]); // 拡張子
                String s = buf.toString();
                System.out.println(s);

                // ファイルの文字コードをシフトJISからUTF-8に変換
                File file = new File(path2);
                File file2 = new File(s);
                try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file),"Shift-JIS"));BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file2),"UTF-8"))){
                    String line;
                    while ((line = br.readLine()) != null) {
                        System.out.println(line);

                        bw.write(line);
                        bw.newLine();
                    }
                }
                catch (Exception e) {
                    e.printStackTrace();
                }
            }
            else{
                text2.setText("");
                text2.setText("このツールでは不可");
            }
        }
    }

    @FXML
    void onButton2Action(ActionEvent event) {
        path = text1.getText();
        FileCharDetector fd = new FileCharDetector(path);

        try{
            code = fd.detector();
        }
        catch (Exception e) {
            System.out.println(e);
        }

        if (code != null){
            text2.setText(code);
        }
        else{
            text2.setText("判定不可");
        }

    }
}