打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
使用freemarker实现夸克浏览器书签导出
因为夸克越来越臃肿,打算换成via。不过夸克不支持书签导出,故一番研究后成功实现夸克浏览器书签导出到via浏览器。
所需工具
  1.navicat premium或其它能读取.db文件的数据库工具
  2.一台安卓模拟器(主要处理手机未root不能操作到.db文件),博主用的是夜神安卓7内核。
步骤1:取出夸克的本地书签.db文件
  在模拟器上下载对应的夸克浏览器,登录自己的账号并同步书签
  具体路径 /data/data/com.quark.browser/databases(如果你是安卓9.0,有限制,就需要吧整个database,文件夹导出,否则是空文件。
  
 
 
步骤2:使用navicat premium打开 bookmark.db(直接拖进去)
  
查看对应的数据类型,进行转换(圈出三个主要的字段)
  
navicat premium的顶部-工具-数据传输-选择对应的库表进行传输(博主用的是mysql,并删除了部分不必要字段)
  
注:也可采用导出数据为excel、json等方法,主要是为了能读取到数据。
 
步骤3:freemarker模版配置并代码生成对应html书签
生成ftl文件
<!DOCTYPE NETSCAPE-Bookmark-file-1>
<!-- This is an automatically generated file.
It will be read and overwritten.
DO NOT EDIT! -->
<META HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=UTF-8'>
<TITLE>Bookmarks</TITLE>
<H1>Bookmarks</H1>
<DL><p>
<DT><H3 ADD_DATE='1504164055' LAST_MODIFIED='1582180674' PERSONAL_TOOLBAR_FOLDER='true'>\u4e66\u7b7e\u680f</H3>
<DL><p>
<#list list as webSite>
<#if webSite.child?? >
<DT><H3 ADD_DATE='1576591875' LAST_MODIFIED='1607497062'>${webSite.title}</H3>
<DL><p>
<#list webSite.child as web>
<DT><A HREF='${web.url}' ADD_DATE='1570762339' ICON='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACXklEQVQ4jZWTT0hUURjFz3ffn3FGZ9RMTamFBS00KIgiKAIhCIqCiBGCCIKoXbtatchq61JI2gS1GmmR4MrAIGghriKpaJOZ6YzMvHHmvZl377vvfi1egxoV9e0ul/Pju+ecCwAAMwHAiXn/zKk34U38xwgAwDgIAIQW15yO1NTJuebs8dnawX8H3AcDAEtS2oOx3LZzFpwXR6fY+VcAAQCUII5AUVnGrMSQvQ/p5J5F65m/B/wcEwEsQaxgsYTWK9AJgAyIGAW2fgXYO04hCARAEgBiD55z7BUXWJiKIvno3Sh9+/sGIYElwFKAQxJBrVuDeI/dJ24Zx1oYWgjuYWnJ/SOAA4bxGSYw4CZbxTsURLZ5LBtgTbo36sk87Ned08OFLUjLxGSDIILxAeNrmHoc781zeq3LeimbzZLqzdhhsxT1dLVf7B5x8wCAQsFKAJzEaOoG8SbB1GOYumZ3v+cWD6MRdcSjflyfcCrK2+XA5FJ0GgCQz3NiYmIdaz82SBk2UoMJVC/pGCDun15e72RLllZVh3ekiv7LKtGNb6XAAKB9mTahBLOmWBqz8Ql8dqZ6Qxb5gbOZGWj3ypH8aAmzHrwHAAxP044i5QZRiaoN+F/9yLYiXJjIzrlu+xNLYIBUXWa6dzspJ14OV9RzAMDYWJy0i5lAxFc+80h50V/UfiyyB9qMSFltsugrVRWurmXhr27OBI3m7Q+Tg8utFLbq2YJ856sUYTJuIKdrgPIMwrXgS7CB8bd3c0+36XgnYBvk/Lw8lMral0yItCoHXqMSPnt9vW8daP0H4pbkB1H4QbCB//9FAAAAAElFTkSuQmCC'>${web.title}</A>
</#list>
</DL><p>
<#else>
<DT><A HREF='${webSite.url}' ADD_DATE='1579405324' ICON='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACXklEQVQ4jZWTT0hUURjFz3ffn3FGZ9RMTamFBS00KIgiKAIhCIqCiBGCCIKoXbtatchq61JI2gS1GmmR4MrAIGghriKpaJOZ6YzMvHHmvZl377vvfi1egxoV9e0ul/Pju+ecCwAAMwHAiXn/zKk34U38xwgAwDgIAIQW15yO1NTJuebs8dnawX8H3AcDAEtS2oOx3LZzFpwXR6fY+VcAAQCUII5AUVnGrMSQvQ/p5J5F65m/B/wcEwEsQaxgsYTWK9AJgAyIGAW2fgXYO04hCARAEgBiD55z7BUXWJiKIvno3Sh9+/sGIYElwFKAQxJBrVuDeI/dJ24Zx1oYWgjuYWnJ/SOAA4bxGSYw4CZbxTsURLZ5LBtgTbo36sk87Ned08OFLUjLxGSDIILxAeNrmHoc781zeq3LeimbzZLqzdhhsxT1dLVf7B5x8wCAQsFKAJzEaOoG8SbB1GOYumZ3v+cWD6MRdcSjflyfcCrK2+XA5FJ0GgCQz3NiYmIdaz82SBk2UoMJVC/pGCDun15e72RLllZVh3ekiv7LKtGNb6XAAKB9mTahBLOmWBqz8Ql8dqZ6Qxb5gbOZGWj3ypH8aAmzHrwHAAxP044i5QZRiaoN+F/9yLYiXJjIzrlu+xNLYIBUXWa6dzspJ14OV9RzAMDYWJy0i5lAxFc+80h50V/UfiyyB9qMSFltsugrVRWurmXhr27OBI3m7Q+Tg8utFLbq2YJ856sUYTJuIKdrgPIMwrXgS7CB8bd3c0+36XgnYBvk/Lw8lMral0yItCoHXqMSPnt9vW8daP0H4pbkB1H4QbCB//9FAAAAAElFTkSuQmCC'>${webSite.title}</A>
</#if>
</#list>
</DL><p>
</DL><p>
 
 
 
生成对应的文件实体(使用json或excel为数据源的同学可略过这步)
package com.mym.pojo;
 
 
 
 
import java.util.List;
 
 
/**
* (Bookmark)实体类
*
* @author makejava
* @since 2021-01-12 13:40:52
*/
public class Bookmark {
private Integer luid;
private String guid;
private Integer parentId;
private String title;
private String url;
private String path;
private Integer orderIndex;
private Integer property;
private Integer folder;
private List<Bookmark> child;
 
 
public Integer getLuid() {
return luid;
}
 
 
public void setLuid(Integer luid) {
this.luid = luid;
}
public String getGuid() {
return guid;
}
 
 
public void setGuid(String guid) {
this.guid = guid;
}
public Integer getParentId() {
return parentId;
}
 
 
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
public String getTitle() {
return title;
}
 
 
public void setTitle(String title) {
this.title = title;
}
public String getUrl() {
return url;
}
 
 
public void setUrl(String url) {
this.url = url;
}
public String getPath() {
return path;
}
 
 
public void setPath(String path) {
this.path = path;
}
public Integer getOrderIndex() {
return orderIndex;
}
 
 
public void setOrderIndex(Integer orderIndex) {
this.orderIndex = orderIndex;
}
public Integer getProperty() {
return property;
}
 
 
public void setProperty(Integer property) {
this.property = property;
}
public Integer getFolder() {
return folder;
}
 
 
public void setFolder(Integer folder) {
this.folder = folder;
}
 
 
public List<Bookmark> getChild() {
return child;
}
 
 
public void setChild(List<Bookmark> child) {
this.child = child;
}
}
 
maven引入freemarker
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.20</version>
</dependency>
 
生成书签文件代码(博主写到了某个项目的接口里)
此处因为本人的书签只有简单两层,所以代码如此,大家根据自己实际需求改动
public String createHtml(Bookmark bookmark) {
Writer out = null;
Writer writer = null;
try {
//查询父级书签(即无文件夹书签和文件夹)
List<Bookmark> list = bookmarkService.findBookmark(bookmark);
//查询文件夹内的书签
List<Bookmark> list2 = bookmarkService.findBookmarkChild(bookmark);
for (int i = 0; i <list.size() ; i++) {
if(list.get(i).getFolder() == 1){
list.get(i).setChild(list2);
}
}
//使用Configuration配置freemarker的路径
Configuration cc = new Configuration();
cc.setDirectoryForTemplateLoading(new File('d:/freemarker/templates'));
Map root = new HashMap();
root.put('list', list);
System.out.println('===='+list.size());
//读取ftl模版
Template template = cc.getTemplate('bookmarker.ftl');
//设置输出编码
template.setEncoding('UTF-8');
out = new OutputStreamWriter(System.out,'UTF-8');
template.process(root, out);
//生成html文件路径
File fileDir = new File('d:/freemarker/create/');
FileUtils.forceMkdir(fileDir);
//输出的文件名
File output = new File((new StringBuilder()).append(fileDir).append('1.html').toString());
// Writer writer = new FileWriter(output);
writer = new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(output),'UTF-8'));
template.process(root, writer);
writer.close();
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if(writer != null){
writer.close();
}
if(out != null){
out.close();
}
}catch (Exception e){
}
}
return null;
}
运行即可
via浏览器的书签格式和chrome的书签格式一致,其它书签格式需要改模版。各位同学自行研究
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Webwork2之Action Result Type
hibernate测试1创建javabean
SpringMVC 过滤json对象
权限管理二进制算法(***)
Java学习——40、泛型
Data注解的使用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服