package dacho;
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FilenameFilter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.Date; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @author debianunsmart * */ public class Start { class Article { public String getStyledTime() { return new SimpleDateFormat("MMMMM ''yy").format(time); } public String getTitle() { return title; } public String getUrl() { return url; } Article(final String title, final String url, final Date time) { this.title = title; this.url = url; this.time = time; } private final Date time; private final String title; private final String url; } /** * @param args */ public static void main(final String[] args) { new Start().run(); } /** * * @param f * @return StringBuilder */ public StringBuilder f2Bld(final File f) { sb.delete(0, sb.length()); try { final FileInputStream fileInputStream = new FileInputStream(f); final InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, encode); final BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String line; while ((line = bufferedReader.readLine()) != null) { sb.append(line + "\n"); } bufferedReader.close(); inputStreamReader.close(); fileInputStream.close(); } catch (final IOException ex) { ex.printStackTrace(); } return sb; } /** * */ public void run() { new File(saveDir).mkdir(); final File[] files = new File(".").listFiles(new FilenameFilter() { @Override public boolean accept(final File dir, final String name) { if (name.contains(".html") && !name.equals("_.html") && !name.equals("index.html") && !name.equals("articlelist.html")) { return true; } return false; } }); sort(files); final ArrayList<Article> as = new ArrayList<Article>(); for (final File f : files) { String fname = f.getName(); while (fname.length() < 24) { fname += "_"; } System.out.println(fname); final String data = getWikiText(f2Bld(f)); final String title = getTitle(data); saveText(data, new File(saveDir + fname + title + ".txt")); as.add(new Article(title, f.getName(), new Date(f.lastModified()))); } mkListPage(as); } private String getTitle(final String data) { final Pattern pattern = Pattern.compile("\\/\\*(.*)\\*\\/"); final Matcher matcher = pattern.matcher(data); if (matcher.find()) { return matcher.group(1); } return ""; } /** * * @param sb * @return */ private String getWikiText(final StringBuilder sb) { final String start = "<textarea id=\"wikitextarea\">"; final String end = "</textarea>"; final int spos = sb.indexOf(start) + start.length(); final int epos = sb.indexOf(end, spos); System.out.println(spos + "> >" + epos); return (String) sb.subSequence(spos, epos); } private void mkListPage(final ArrayList<Article> as) { String lastYM = ""; final StringBuilder listsb = new StringBuilder(); for (final Article article : as) { final String thisYM = article.getStyledTime(); if (!thisYM.equals(lastYM)) { if (!lastYM.equals("")) { listsb.append("</ul>\n"); } listsb.append("<h2>" + thisYM + "</h2>\n<ul>"); } listsb.append("<li><a href=\"./" + article.getUrl() + "\">" + article.getTitle() + "</a></li>\n"); lastYM = thisYM; } final StringBuilder datasb = f2Bld(template); final String insertFlag = "<div id=\"listul\">"; datasb.insert(datasb.indexOf(insertFlag) + insertFlag.length(), listsb); saveText(datasb.toString(), new File("articlelist.html")); } /** * * @param str * @param sf */ private void saveText(final String str, final File sf) { try { final FileOutputStream fos = new FileOutputStream(sf); final OutputStreamWriter osw = new OutputStreamWriter(fos, encode); osw.write(str); osw.flush(); osw.close(); fos.close(); } catch (final IOException e) { e.printStackTrace(); } } @SuppressWarnings("unchecked") private void sort(final File[] files) { Arrays.sort(files, new Comparator() { public int compare(final Object o1, final Object o2) { if (((File) o1).lastModified() > ((File) o2).lastModified()) { return -1; } else if (((File) o1).lastModified() < ((File) o2).lastModified()) { return +1; } else { return 0; } } }); } private final String encode = "UTF-8"; private final String saveDir = "texts/"; private final StringBuilder sb = new StringBuilder(); private final File template = new File("attc" + File.separator + "listtemp.txt"); } Leave your comments |
|