接著昨天學(xué)習(xí)的 Lucene-2.2.0 源代碼閱讀學(xué)習(xí)(11) 繼續(xù)學(xué)習(xí)。 IndexWriter的一個(gè)構(gòu)造器,定義如下所示:
public IndexWriter(String path, Analyzer a, boolean create)
已經(jīng)知道,init方法的復(fù)雜性和重要性。對init方法所涉及到的有用的相關(guān)類進(jìn)行系統(tǒng)地學(xué)習(xí)。 init方法的聲明是這樣的: private void init(Directory d, Analyzer a, final boolean create, boolean closeDir, IndexDeletionPolicy deletionPolicy, boolean autoCommit) 首先看一下Directory這個(gè)類的繼承關(guān)系,如圖所示: Directory是一個(gè)抽象類,它是與目錄有關(guān)的一個(gè)類,主要定義了一些與目錄相關(guān)的屬性和行為,源代碼如下所示: package org.apache.lucene.store; import java.io.IOException; public abstract class Directory {
// 有目錄相關(guān)的一個(gè)鎖工廠,主要是為向目錄中寫入文件服務(wù),使用工廠模式,寫入文件內(nèi)容必須獲取鎖
//?? 獲取該目錄下的所有文件名稱字符串的一個(gè)數(shù)組
// 判斷指定文件名稱為name的文件是否存在
// 獲取指定文件名稱為name的文件最后修改的時(shí)間
//?? 設(shè)置指定文件名稱為name的文件的修改時(shí)間為當(dāng)前時(shí)間
// 刪除已經(jīng)存在于該目錄下的指定文件名稱為namde的文件
// 重新命名文件,將原文件名from修改為to
// 獲取
指定文件名稱為name的文件的長度
/** 讀取該目錄下名稱為name的文件,指定了讀入緩沖區(qū)的大小為bufferSize,返回一個(gè)輸入流
// 獲取一個(gè)鎖對象,其中name指定的鎖文件的名稱,即write.lock文件
// 關(guān)閉該目錄,不再對該目錄操作了
// 當(dāng)該目錄被管理,要對其進(jìn)行操作之前,必須先創(chuàng)建一個(gè)鎖工廠LockFactory實(shí)例,只有擁有了鎖工廠才可以獲取鎖實(shí)例
// 獲取鎖工廠實(shí)例
// 過去鎖實(shí)例的唯一表示ID的字符串描述
// 拷貝源目錄src下的文件,復(fù)制到目的目錄dest下面,拷貝完成后關(guān)閉源目錄src
????? if (files == null)???
// 如果源目錄src下沒有文件,則拋出異常
????? // 如果獲取到的源目錄src目錄下的文件列表files不空,就執(zhí)行復(fù)制操作
????? byte[] buf = new byte[BufferedIndexOutput.BUFFER_SIZE];
從Directory抽象類的定義,我們可以得到如下幾點(diǎn): 1、管理鎖工廠及其鎖實(shí)例; 2、管理Directory目錄實(shí)例的基本屬性,主要是通過文件名稱進(jìn)行管理; 3、管理與操作該目錄相關(guān)的一些流對象; 4、管理索引文件的拷貝。 然后就要對Directory抽象類的具體實(shí)現(xiàn)類進(jìn)行學(xué)習(xí)了。 |
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
