前提・実現したいこと
javaの基礎学習をつい先日1周した者です。
実践的な何かを作りたく、タイトルのようなものを想定し現在作成中です。
作り方が分からなくなってしまい、長時間手が止まってしまったのでここに記述し、
他者にみてもらう事で整理をしようと思っております。
かなり迷走していて基礎も調べながらの記述になっているため
コードが読みづらいかもしれませんがご容赦ください。
・csvファイルはindex年月日時分秒のフォーマットを使い作成
・読み込みたいフォルダはエディターのデバック環境に引数として登録済み
・csvファイルには HTMLファイル名とタイトルを1行ずつ記述する
上記のようなものを目標に作成しております。
該当のソースコード
csvファイルの作成 htmlファイル名取得 htmlファイル名をcsvファイルに書き込み までの完成したコード import java.io.File; import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.io.BufferedWriter; import java.io.FileWriter; public class App { public static void main(String[] args) throws Exception { // void型でmainを定義 Calendar c = Calendar.getInstance(); //カレンダークラスにより現在日時を取得 DateFormat myFormat = new SimpleDateFormat("_yyyy_MM_dd_HH_mm_ss"); // 日時のフォーマットを設定 String FileName = "index" + myFormat.format(c.getTime()); // FileNameにファイルネームを定義 File newFile = new File("/Users/mono/tmp/" + FileName + ".csv"); // Fileを/Users/mono/tmp/FileName.csvで作成 try{ if(newFile.createNewFile()){ // もしファイル作成できたら System.out.println(FileName + "のファイルの作成に成功"); // 上記の文章をコマンドラインに表示 }else{ // ファイル作成出来ていなかったら System.out.println("ファイルの作成に失敗"); // 上記の文章をコマンドラインに表示 } }catch(IOException e){ System.out.println(e); } if (args.length != 0){ // 引数の数が0+1個だったら File dir = new File(args[0]); // 引数に設定してあるフォルダをdirに定義 File[] fileList = dir.listFiles(); // fileListにフォルダ内のファイルを配列として格納 for(int i = 0; i < fileList.length; i++){ // fileListの数だけ処理を繰り返す if(fileList[i].getName().contains(".html")){ // .html拡張子のファイル名を取得 if(checkBeforewritefile(newFile)){ BufferedWriter bw = new BufferedWriter(new FileWriter(newFile)); // newFileにまとめて書き込む準備をバッファでする。 bw.write(fileList[i].getName()); // 処理中のfileListの名前をnewFileに書き込む bw.close(); // 1行の処理のため一度閉じる System.out.println(fileList[i].getName() + "のファイル名を書き込みました"); // 書き込めた場合この文章をコマンドラインに表示 } else{ System.out.println("書き込めませんでした"); } } } } } private static boolean checkBeforewritefile(File newFile) { if(newFile.exists()){ if(newFile.isFile() && newFile.canWrite()){ return true; } } return false; } }
作りたいものの作りかけのコード import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.regex.Pattern; import java.util.regex.Matcher; import java.io.Closeable; public class App { public static void main(String[] args) throws Exception { //カレンダークラスにより現在日時を取得 Calendar c = Calendar.getInstance(); // 日時のフォーマットを設定 DateFormat myFormat = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss"); // ファイル名を定義 String FileName = "index" + myFormat.format(c.getTime()); // File newFile = new File("/Users/mono/tmp/" + FileName + ".csv"); try{ if(newFile.createNewFile()){ System.out.println(FileName + "のファイルの作成に成功"); }else{ System.out.println("ファイルの作成に失敗"); } }catch(IOException e){ System.out.println(e); } if (args.length != 0){ //引数必ず1つであること //エディターに引数設定済み File dir = new File(args[0]); //設定からフォルダを引数として受け取る File[] fileList = dir.listFiles(); //フォルダの中身を配列として格納 if(fileList != null){ //もしフォルダの中身が終わってないなら for(int i = 0; i < fileList.length; i++){ //繰り返し処理をします try{ if (fileList[i].getName().contains(".html")){//もし html を含むファイル名があるならば if (checkBeforewritefile(newFile)){ // もしcsvファイルに書き込みをするならば BufferedWriter bw = new BufferedWriter(new FileWriter(newFile)); // csvファイルにファイル書き込みをする宣言 // BufferedReader br = new BufferedReader(new FileReader(fileList[i])); // ファイルを読み込む準備 // String line; // String型を定義 // while((line = br.readLine()) != null); // 行がなくなるまで1行ずつ処理していく // String regex =" <(title)>.*?<\>"; // これを取得したいと定義 // Pattern p = Pattern.compile(regex); // 定義した物をパターンと定義 // check(p,line); // 1行ずつパターンがないかチェック System.out.println(fileList[i].getName() + "のファイル名を書き込みました"); bw.write(fileList[i].getName()); //フォルダから取得したhtmlを含むファイル名をcsvファイルに書き込み bw.close(); } }else{ System.out.println("書き込めませんでした"); } }catch(IOException e){ System.out.println(e); }finally{ } } } } } private static boolean checkBeforewritefile(File newFile) { if(newFile.exists()){ if(newFile.isFile() && newFile.canWrite()){ return true; } } return false; } private static void check(Pattern p, String line) { Matcher m = p.matcher(line); if (m.find()){ // バッファ 取得したタイトル で書き込み }else{ // バッファ タイトルなし で書き込み } } }
分かっていない事
・タイトルにマッチしている物を書き込む方法
・繰り返しの処理を何段階かに分けて書く方法
質問内容やコードが見づらく申し訳ございません。
ご指摘があった所を一つずつなおしていきますので何卒よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー