import java.io.*;
import java.util.*;
import java.util.regex.*;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
public class HTMLIndexMaker {
public static void main(String[] args) {
File file = selectFile(null);
if (file == null || file.isDirectory() || !file.canRead()) {
System.exit(0);
}
String html = getHTML(file);
List<String> list = getList(html);
showList(list);
System.out.println("finish..." + list.size() + "個の見出しを検出しました");
}
ダイアログを開きファイルを選択する
参照->http://www.javadrive.jp/tutorial/jfilechooser/index.html
@return
private static File selectFile(final JFrame frame) {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setMultiSelectionEnabled(false);
FileNameExtensionFilter filter = new FileNameExtensionFilter("HTMLファイル", "html", "htm");
fileChooser.addChoosableFileFilter(filter);
if (fileChooser.showOpenDialog(frame) == JFileChooser.APPROVE_OPTION) {
return fileChooser.getSelectedFile();
} else {
return null;
}
}
HTMLファイルの内容(テキスト)をStringに読み込む
HTMLファイルはシフトJIS(MS932)であること
参考->http://www.ne.jp/asahi/hishidama/home/tech/java/file.html
private static String getHTML(final File file) {
StringBuffer sb = new StringBuffer();
InputStream is = null;
Reader r = null;
BufferedReader br = null;
try {
is = new FileInputStream(file);
r = new InputStreamReader(is, "MS932");
br = new BufferedReader(r);
while (br.ready()) {
sb.append(br.readLine());
}
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
}
}
if (r != null) {
try {
r.close();
} catch (IOException e) {
}
}
if (is != null) {
try {
is.close();
} catch (IOException e) {
}
}
}
return sb.toString();
}
Stringを検索し、見出し一覧を作成する
@param html
@return
private static List<String> getList(final String html) {
List<String> list = new ArrayList<String>();
Pattern pattern = Pattern.compile("<h[1-6].+?</h[1-6]>");
Matcher matcher = pattern.matcher(html);
while (matcher.find()) {
list.add(matcher.group());
}
return list;
}
リストを表示する(デバッグ用)
@param list
private static void showList(final List<String> list) {
ListIterator li = list.listIterator();
while (li.hasNext()) {
System.out.println(li.next().toString());
}
}
}