《知乎脚丫第三弹》已经能把所需要的问题标题、问题的描述、问题的链接、评论者姓名以及评论(貌似评论爬去地还不太准确)打印在控制台上,这一辑运用Java的io库把所有的内容优雅地输出到本地文件中。
本地创建文件、写文件
既然要本地存储,那么首先本地得有地方放东西,这个地方就是文件。在本项目里先创建文件夹out,在创建outout.txt文件用来存储内容。
这里使用BufferedWriter缓冲区,通过BufferedWriter和FileWriter的链接,BufferedWriter可以暂存一堆数据,然后到满的时候再实际写入磁盘,这样就可以减少对磁盘操作的次数。这其实也是装饰设计模式的使用。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 /*
* 参数:filename="output.txt";
* 实际上文件的绝对路径是:out/output.txt
*/
public static void writeIntoFile(String filename){
//先要创建一个文件夹
File dir=new File("out");
dir.mkdirs();
//再创建文件
File file=new File("out/"+filename);
try{
file.createNewFile();
}catch(Exception e){
e.printStackTrace();
}
System.out.println("create \"out/output.txt file\" successed.");
//往刚创建的文件里面写数据
try {
BufferedWriter outwriter=new BufferedWriter(new FileWriter(file));
outwriter.write("大家好,这是我的博客地址:henryliyunfeng.github.io\n我就是爱折腾的李昀峰");
outwriter.flush();
outwriter.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
为Zhihu类添加格式化排版方法realToString()
1 | //格式化内容,用于Filewiter.java写入本地时的排版 |
可以看出,输出内容了有很多<img>、<b>、<br>、<a>
等html标签,是不需要的内容,可以把这些东西替换掉,自然想到String
类里面有replaceAll(src,target)
方法,则改进后:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16//格式化内容,用于Filewiter.java写入本地时的排版
public String realToString(){
String content= "问题标题:"+question+"\r\n";
content+="问题的描述:"+questionDescription+"\r\n";
content+="链接:"+zhihuUrl+"\r\n";
content+="评论者:"+answersName+"\r\n";
content+="回答:";
for(int i=0;i<answers.size();i++){
int num=i+1;
content+="No."+num+"="+answers.get(i)+"\r\n";
}
//去除替换部分不需要的html标签
content = content.replaceAll("<br>", "\r\n");
content = content.replaceAll("<.*?>", "");
return content;
}
多态,重写writeIntoFile(filename,myZhihu)方法
1 | /* |
明显的可以看到那些烦人的html标签不复存在了,OK,打完收工!