前言
因為誇克越來越臃腫,打算換成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的書簽格式一致,其它書簽格式需要改模版。各位同學自行研究