今天用JAVA编辑了一段小程序。其缘由如下:我个人很推崇静官的小说《兽血沸腾》,不过汗颜的是看的都是盗版的。今日从网上下载了一个全TXT版本的合集放到MP3上,但由于制作者的原因,他把多个章节放入了一个大的TXT文件中。虽然可以通过文件名称“521-540”章找到一个特定章节,但是即不知道其中具体章节的名称是什么,又难于在没有书签的情况下找到一个特定章节。怎么办?干脆自己编一段程序把这些章节拆析出来算了,这样既能直接找到某一个章节,又能看到章节的名称。
有了这个念头就着手来编写这个程序。今天突发奇想决定用JAVA来编写,用了大概6个小时左右完成了整个工作。其中对于算法的设计有一些反复。本来以为很简单的工作,没有画流程图就开始写代码,到了后来却搞得有点晕乎,于是乎画了流程图,很快就确定了程序哪个地方有问题。但是由于很久没有用JAVA来写程序了,一是因为最近没有这个需求(最近一直再用Delpih写windows应用),二是对JAVA的IDE实在是不敢恭维(个人比较喜欢Jbuilder,那些Eclipse的粉丝不要攻击我)。在用JAVA写程序时遇到了很多不顺手的地方,最后不得已只能不再装B(用JCreator编辑),使用了Eclipse。借助Eclipse进行调试,完成了最终目标。
如果用Delphi可能写代码只要20分钟就能搞定,而用JAVA却折腾了至少3个小时。从这点上看,以学习的身份使用一种语言完成工作确实不太值得。
另,下面把代码附上来。
2
3 public class PreFile {
4
5 public int outputFile(String fileName, String fileContent) {
6 try {
7 File outputFile = new File(fileName);
8
9 OutputStreamWriter osw = new OutputStreamWriter(
10 new FileOutputStream(outputFile), "GBK");
11 osw.write(fileContent, 0, fileContent.length());
12 osw.close();
13 return fileContent.length();
14 } catch (Exception ex) {
15 ex.printStackTrace();
16 return -1;
17 }
18 }
19
20 public static void main(String[] args) {
21
22 int i, iFileNamePrefix = 1000;
23 int iChapterTitleStart, iChapterTitleEnd;
24 boolean bIsFindChapterStart = false;
25 String sChapterTitle, sChapterContent;
26
27 PreFile pf = new PreFile();
28 sChapterTitle = new String();
29 sChapterContent = new String();
30
31 try {
32
33 File path = new File("f:/novel/origin");
34 File[] ffs = path.listFiles();
35 for (i = 0; i < ffs.length; i++) {
36 InputStreamReader isr = new InputStreamReader(
37 new FileInputStream(ffs[i]), "GBK");
38 BufferedReader reader = new BufferedReader(isr);
39
40 String line;
41
42 while ((line = reader.readLine()) != null) {
43 iChapterTitleStart = line.indexOf("第");
44 iChapterTitleEnd = line.indexOf("章");
45 if ((iChapterTitleStart != -1) && (iChapterTitleEnd != -1)
46 && (iChapterTitleStart < 2)) {
47 if ((iChapterTitleEnd - iChapterTitleStart) < 10) {
48 if (!bIsFindChapterStart) {
49 sChapterTitle = line;
50 bIsFindChapterStart = true;
51 continue;
52 } else {
53 String sFileName = new Integer(
54 ++iFileNamePrefix).toString()
55 .substring(1);
56 sFileName = "f:/novel/out/[" + sFileName + "]"
57 + sChapterTitle + ".txt";
58 System.out
59 .println(pf.outputFile(sFileName,
60 sChapterTitle + "\n"
61 + sChapterContent));
62
63 sChapterTitle = line;
64 sChapterContent = "";
65 bIsFindChapterStart = true;
66 continue;
67 }
68 } else {
69 sChapterContent += (line + "\n");
70 }
71 }
72
73 iChapterTitleStart = line.indexOf("第");
74 iChapterTitleEnd = line.indexOf("章");
75 if ((iChapterTitleStart != -1) && (iChapterTitleEnd != -1)
76 && (iChapterTitleStart < 2)) {
77 if ((iChapterTitleEnd - iChapterTitleStart) < 10) {
78 if (bIsFindChapterStart) {
79 String sFileName = new Integer(
80 ++iFileNamePrefix).toString()
81 .substring(1);
82 sFileName = "f:/novel/out/[" + sFileName + "]"
83 + sChapterTitle + ".txt";
84 System.out
85 .println(pf.outputFile(sFileName,
86 sChapterTitle + "\n"
87 + sChapterContent));
88 sChapterTitle = line;
89 sChapterContent = "";
90 bIsFindChapterStart = false;
91 continue;
92 }
93 } else {
94 sChapterContent += (line + "\n");
95 }
96 }
97
98 sChapterContent += (line + "\n");
99 }
100
101 }
102
103 } catch (Exception ex) {
104 ex.printStackTrace();
105 }
106 }
107 }
108