このページの作成及びbzrで管理するための記事本文アーカイブディレクトリの作成に利用しているコード
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

    inserted by FC2 system