[Java] 79 Swing 17 JEditorPaneハイパーリンク・クリック後のHTMLファイル作成 Python外部プログラム

前回の続きです。

Java-Swingアプリにて選択したレース結果のHTMLファイルを作成するPythonコードです。作成されたHTMLファイルは前回記事にあるMainクラスによりブラウザに表示されます。

このコードではCSVファイルの全内容がtableになるため、適宜加工が必要になります。tableを分割するなどして整形してから、cssファイルで徐々に見栄えを良くしていくつもりです。

import glob
import pandas as pd

paths = glob.glob('/*.csv')
paths2 = sorted(paths)
csvfile = paths2[-2]

df = pd.read_csv(csvfile,encoding='UTF-8')

race_count = len(df)
print("レース数 " + str(len(df)))

list_raceID = df['raceID'].tolist()

pathsB = glob.glob('/race/*.html')
pathsB2 = sorted(pathsB)
html_file = pathsB2[-1]

# 空ファイル名からレース番号を抽出(Javaとの連携箇所)
race_num = html_file.split(".")[0][-3:]
print(race_num)

raceID = list_raceID[int(race_num) -1]
print(raceID)

# racefileパスを作成する
year = raceID[1:5]
course = raceID[5:7]
kai =  raceID[7:9]
racefile = "race" + raceID[1:] + ".csv"
racefile_path = f"/race/{year}/{course}/{kai}/{racefile}"

print(f"year {year}")
print(f"course {course}")
print(f"kai {kai}")
print(f"racefile {racefile}")
print(f"racefile_path {racefile_path}")

df2 = pd.read_csv(racefile_path,encoding="shift_JIS")

html_string = '''
<html>
    <head><meta charset="UTF-8">
    <title>TEST</title>
    </head>
    <body>
        {table}
    </body>
</html>.
'''

with open(html_file,'w') as f:
    f.write(html_string.format(table=df2.to_html(index=False)))

[Java] 78 Swing 16 JEditorPaneハイパーリンク・クリック後のHTMLファイル作成 Mainクラス

[Java] 75 Swing 15の続きです。

Mainクラスから外部プログラムを実行してレース結果HTMLファイルを作成します。

今回はMain.javaの内容を載せます。自製のProcessExecutor.exec()メソッドでコンソールからPythonコードを実行します。

    // PAGE_CENTER設定
		editorPane = new JEditorPane();
		contentPane.add(editorPane, BorderLayout.CENTER);
		editorPane.setContentType("text/html");
		editorPane.setEditable(false);
		editorPane.setBackground(new Color(0xf0f8ff));
		editorPane.addHyperlinkListener(new HyperlinkListener() {
            @Override
            public void hyperlinkUpdate(HyperlinkEvent e) {
		        if (HyperlinkEvent.EventType.ACTIVATED.equals(e.getEventType())) {
		        	String race_html_pre = e.getURL().toString();
		        	System.out.println("race_html " + race_html_pre);

		        	String race_html = race_html_pre.substring(5);
		        	StringBuilder HTMLcode = new StringBuilder();
		        	HTMLcode.append("<table>" + "</table>");

		        	// /raceディレクトリのインスタンスを作成する
		        	File dir = new File("/race/");

		            // listFilesメソッドを使用して一覧を取得する
		            File[] list = dir.listFiles();

		            // 一覧のファイルを全て削除する
		            for(int i=0; i<list.length; i++) {
		            	File file = new File(list[i].toString());
						      file.delete();
		            }

		        	// 空HTMLファイルの作成
		            try{
		                File file = new File(race_html);
		                FileWriter filewriter = new FileWriter(file);
		                filewriter.write(HTMLcode.toString());
		                filewriter.close();}
		            catch(IOException e0){
		                System.out.println(e0);
		            }

		            // クリックしたレースのHTMLファイルを作成して上書きする(外部プログラム)
		            String type = "race";
		            try {
		                ProcessExecutor.exec(type);
					 } catch (Exception e1) {
		                e1.printStackTrace();
			        }

		            Desktop desktop = Desktop.getDesktop();
		            try {
		                desktop.browse(e.getURL().toURI());
		            } catch (IOException e2) {
		                e2.printStackTrace();
		            } catch (URISyntaxException e2) {
		                e2.printStackTrace();
		            }
		        }
		    }
        });

[Java] 77 ディレクトリ内ファイルを全て削除する

メモ書きしておきます。

// 対象ディレクトリのインスタンスを作成する
File dir = new File("対象ディレクトリのパス");

// listFilesメソッドでファイル一覧を取得する
File[] list = dir.listFiles();

// ファイルを全て削除する
for(int i=0; i<list.length; i++) {
    File file = new File(list[i].toString());
    file.delete();
}