java自製簡單的文件檢索工具(java自製簡單的文件檢索工具有哪些)

本文目錄一覽:

java中如何實現全文檢索

java的開源的免費全文檢索工具Lucene

Lucene不是一個完整的全文索引應用,而是是一個用Java寫的全文索引引擎工具包,它可以方便的嵌入到各種應用中實現針對應用的全文索引/檢索功能。

Lucene的作者:Lucene的貢獻者Doug Cutting是一位資深全文索引/檢索專家,曾經是V-Twin搜索引擎(Apple的Copland操作系統的成就之一)的主要開發者,後在Excite擔任高級系統架構設計師,目前從事於一些INTERNET底層架構的研究。他貢獻出的Lucene的目標是為各種中小型應用程序加入全文檢索功能。

Lucene的發展歷程:早先發布在作者自己的,後來發布在SourceForge,2001年年底成為APACHE基金會jakarta的一個子項目:

已經有很多Java項目都使用了Lucene作為其後台的全文索引引擎,比較著名的有:

Jive:WEB論壇系統;

Eyebrows:郵件列表HTML歸檔/瀏覽/查詢系統,本文的主要參考文檔“TheLucene search engine: Powerful, flexible, and free”作者就是EyeBrows系統的主要開發者之一,而EyeBrows已經成為目前APACHE項目的主要郵件列表歸檔系統。

Cocoon:基於XML的web發布框架,全文檢索部分使用了Lucene

Eclipse:基於Java的開放開發平台,幫助部分的全文索引使用了Lucene

對於中文用戶來說,最關心的問題是其是否支持中文的全文檢索。但通過後面對於Lucene的結構的介紹,你會了解到由於Lucene良好架構設計,對中文的支持只需對其語言詞法分析接口進行擴展就能實現對中文檢索的支持。

java如何實現搜索功能。比如,輸入txt就能搜索出這個文件夾內所有txt格式的文件。請給完整代碼。

import java.io.*;

public class FileDemo{

public static void main(String[] args)throws Exception{

        //第一個參數是文件路徑,第二個參數是要搜索的文件擴展名

getFile(“D:\\JavaDemo”,”.txt”);

}

private static void getFile(String pathName, final String endsWith)throws Exception{

File file = new File(pathName);

if(!file.exists())

throw new RuntimeException(“文件不存在,你檢索個P呀。”);

file.listFiles(new FileFilter(){

public boolean accept(File file){

if(file.getName().endsWith(endsWith)){

System.out.println(file.getName());

return true;

}else

return false;

}

});

}

}

如何用java做一個檢索txt數據csdn

首先獲得一個文件句柄。File file = new File(); file即為文件句柄。兩人之間連通電話網絡了。接下來可以開始打電話了。

通過這條線路讀取甲方的信息:new FileInputStream(file) 目前這個信息已經讀進來內存當中了。接下來需要解讀成乙方可以理解的東西

既然你使用了FileInputStream()。那麼對應的需要使用InputStreamReader()這個方法進行解讀剛才裝進來內存當中的數據

解讀完成後要輸出呀。那當然要轉換成IO可以識別的數據呀。那就需要調用字節碼讀取的方法BufferedReader()。同時使用bufferedReader()的readline()方法讀取txt文件中的每一行數據哈。

package com.campu;

import java.io.BufferedInputStream;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStreamReader;

import java.io.Reader;

public class H20121012 {

/**

* 功能:Java讀取txt文件的內容

* 步驟:1:先獲得文件句柄

* 2:獲得文件句柄當做是輸入一個字節碼流,需要對這個輸入流進行讀取

* 3:讀取到輸入流後,需要讀取生成字節流

* 4:一行一行的輸出。readline()。

* 備註:需要考慮的是異常情況

* @param filePath

*/

public static void readTxtFile(String filePath){

try {

String encoding=”GBK”;

File file=new File(filePath);

if(file.isFile() file.exists()){ //判斷文件是否存在

InputStreamReader read = new InputStreamReader(

new FileInputStream(file),encoding);//考慮到編碼格式

BufferedReader bufferedReader = new BufferedReader(read);

String lineTxt = null;

while((lineTxt = bufferedReader.readLine()) != null){

System.out.println(lineTxt);

}

read.close();

}else{

System.out.println(“找不到指定的文件”);

}

} catch (Exception e) {

System.out.println(“讀取文件內容出錯”);

e.printStackTrace();

}

}

public static void main(String argv[]){

String filePath = “L:\\Apache\\htdocs\\res\\20121012.txt”;

// “res/”;

readTxtFile(filePath);

}

怎麼用java 開發一個搜索引擎呀?

一.           創建索引

1.一般創建索引的核心步驟

(1). 創建索引寫入對象IndexWriter:

IndexWriter indexWriter = new IndexWriter(INDEX_STORE_PATH,new StandardAnalyzer(),create);

參數說明:INDEX_STORE_PATH:  索引文件存放路徑

new StandardAnalyzer(): 分詞工具

create: 此參數為Boolean型,true表示重新創建整個索引, false 表示增量式創建索引。

(2).創建文檔模型,並用IndexWriter對象寫入

Document doc = new Document();

Field field1 = new Field(fieldName1, fieldValue ,  Field.Store.YES, Field.Index.TOKENIZED);

doc.add(field1);

Field field2 = new Field(fieldName2, fieldValue ,  Field.Store.YES, Field.Index.TOKENIZED);

doc.add(field2);

……

indexWriter.addDocument(doc);

indexWriter.close();

參數說明:

Document :負責搜集數據源,它可以從不同的物理文件提取數據並放入同一個Document 中或從一個物理文件中提取出不同的數據並放入同一個Document中。

如下圖所示

                 

Field :用來表示不同的數據源

fieldName1: 表示field名稱

fieldValue:  表示field 的值

Field.Store.YES,:表示是否在索引文件中完整的存儲該值。

在創建索引時,有些內容需要以摘要的形式完整地或以片段的方式顯示在頁面上,來便於用戶查找想要的記錄,那麼就應該選擇存儲,如果不需要完整或片段的顯示就不需要存儲。

Field.Index.TOKENIZED :表示是否索引和分詞。

只要是需要當作關鍵字讓用戶查找的字段就需要建立索引。

在建立索引的過程中,如果像文章標題、文章內容這樣的Field, 一般是靠用戶輸入幾個關鍵字來查詢的,就應該選擇分詞。

如果需要用戶輸入完整字符也就是精確查找才能查詢到的,例如:beanName,就可以不分詞。

Document最直觀的理解方式:

Document就相當於我們平台中的一個普通javaBean,,而Field 就是javaBean中的一個屬性。lucene搜索的機制就是靠搜索指定的Field的值 ,來得到含有要搜索內容的Document 集合,所以問題的關鍵在於如何組織Document .

2.結合平台創建索引的思路

(1) 經分析搜索元素應該由如下內容組成(Document的屬性)

(2) 數據庫數據轉化為Document 的構造過程:

JavaBean / Attachment     →   (Temp Object) BaseData  →   (Finally Object) Document

分析:

要建立索引的源數據分為兩大部分:一個是數據庫數據 BeanData ,另一個是附件數據 FileData , 這樣可以建立一個抽象類 BaseData , 來存放它們共有的屬性。同時為了管理這些相應的數據,在相同的等級結構上,建立了相應的管理類(xxxDataManager) ,對這些數據類的操作(建立或刪除索引)進行管理,並用一個工廠類(DataManagerFactory)來創建所需要的管理類,IndexHelper用來充當整個索引模塊對外的接口,為了實現一些與平台特定的業務,特用SupportManager來提供一些額外的業務支持,索引模塊代碼結構如下圖所示。

二.搜索索引

1.   lucene 搜索的核心步驟:

String[]  fields  =  {“title”, “summary”,……};     //要查找的field範圍

BooleanClause.Occur[]   flags  =  {BooleanClause.Occur.SHOULD, BooleanClause.Occur. MUST ,……};

Query  query = MultiFieldQueryParser.parse(queryStr, fields,flags,new StandardAnalyzer());

Hits  hits  =  new  IndexSearcher(INDEX_STORE_PATH).search(query);

for (int i = 0;i hitsLength ; i++)

{

Document doc = hits.doc(i);

String title = doc.get(“title”);

String summary = doc.get(“summary”);

// 搜索出來的結果高亮顯示在頁面上

if (title != null) {

TokenStream tokenStream = analyzer.tokenStream(“title”,new StringReader(title));

String highlighterValue = highlighter.getBestFragment(tokenStream, title) ;

if(highlighterValue != null){

title = highlighterValue ;

}

//log.info(“SearchHelper.search.title=”+title);

}

if(summary!= null){

TokenStream tokenStream = analyzer.tokenStream(“summary”,new StringReader(summary));

String highlighterValue = highlighter.getBestFragment(tokenStream, creator) ;

if(highlighterValue != null){

summary = highlighterValue ;

}

//log.info(“SearchHelper.search. summary =”+ summary);

}

}

2.結合平台構造搜索模塊

PageData 類用來存放檢索結果集數據。

PageInfo 類用來存放頁面相關信息例如,PageData對象集合、總記錄個數、每一頁的記錄數、 總頁面數量等等。

SearchHelper用來充當整個搜索模塊的對外接口。

三.為平台組件添加索引的步驟(以知識中心為例)

1.在com.cscec.oa.searchengine.extend.module 目錄下添加一個新的package

例如:com.cscec.oa.searchengine.extend.module.resourcestore

2.在新的目錄下建立data package 並建立相應的數據類,並使這個數據類繼承BeanData。

例如:

package com.cscec.oa.searchengine.extend.module.resourcestore.data

public class ResourceStoreBeanData extends BeanData{

}

3. 與data package 同一級目錄建立manager package 並建立相應管理類,並使這個管理類繼承BeanDataManager

例如:

com.cscec.oa.searchengine.extend.module.resourcestore.manager

public class ResourceStoreBeanDataManagerImpl extends BeanDataManager{

}

4.以管理員的身份登陸OA後,在菜單中找到“索引模塊管理”鏈接,將相應信息添加完成後,便可以在List 頁面 點擊“創建索引”對該模塊的數據進行索引的建立,建立完成後便可以進行查詢。

java如何實現文件搜索功能

java實現文件搜索主要使用file類和正則表達式,如下示例:

package com.kiritor.util;

import java.io.File;

import java.io.FileFilter;

import java.util.Arrays;

import java.util.Collections;

import java.util.List;

/**

 * 文件的相關操作類

 * 

 * @author Kiritor

 */

public class FileOperation {

private static String contentPath;

private static String filePath;

private static File[] fileList = null;// 保存文件列表,過濾掉目錄

public FileOperation() {

}

/** 構造函數的參數是一個目錄 */

public FileOperation(String path) {

File file = new File(path);

if (file.isDirectory())

this.contentPath = path;

else

this.filePath = path;

}

    /**獲取文件列表*/

public static File[] getFiles() {

if (contentPath == null) {

File file = new File(filePath);

fileList = new File[1];

fileList[0] = file;

return fileList;

}

fileList = new File(contentPath).listFiles(new FileFilter() {

/**使用過濾器過濾掉目錄*/

@Override

public boolean accept(File pathname) {

if(pathname.isDirectory())

{

return false;

}else

return true;

}

});

return fileList;

}

/** 對當前目錄下的所有文件進行排序 */

public static File[] sort() {

getFiles();

Arrays.sort(fileList, new FileComparator());

return fileList;

}

public static void tree(File f, int level) {

String preStr = “”;

for(int i=0; ilevel; i++) {

preStr += ”    “;

}

File[] childs = f.listFiles();

//返回一個抽象路徑名數組,這些路徑名表示此抽象路徑名表示的目錄中的文件。

for(int i=0; ichilds.length; i++) {

System.out.println(preStr + childs[i].getName());

if(childs[i].isDirectory()) {

tree(childs[i], level + 1);

}

}

}

// 提供一個”比較器”

static class FileComparator implements java.util.ComparatorFile {

@Override

public int compare(File o1, File o2) {

// 按照文件名的字典順序進行比較

return o1.getName().compareTo(o2.getName());

}

}

}

用java如何製作一個檢索數據庫的小軟件,可以幫我完成修改,查詢,刪除數據庫中信息等功能

簡單的直接用swing開發就可以了,只要你機器有java環境

後台用jdbc,把數據庫的連接帳號密碼寫成全局的可配的,放在配置文件里也可以

再做相關表的增刪改查窗口就可以了

原創文章,作者:XXS5T,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/129042.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
XXS5T的頭像XXS5T
上一篇 2024-10-03 23:26
下一篇 2024-10-03 23:26

相關推薦

  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • vue下載無後綴名的文件被加上後綴.txt,有後綴名的文件下載正常問題的解決

    本文旨在解決vue下載無後綴名的文件被加上後綴.txt,有後綴名的文件下載正常的問題,提供完整的代碼示例供參考。 一、分析問題 首先,需了解vue中下載文件的情況。一般情況下,我們…

    編程 2025-04-29
  • 如何在Java中拼接OBJ格式的文件並生成完整的圖像

    OBJ格式是一種用於表示3D對象的標準格式,通常由一組頂點、面和紋理映射坐標組成。在本文中,我們將討論如何將多個OBJ文件拼接在一起,生成一個完整的3D模型。 一、讀取OBJ文件 …

    編程 2025-04-29
  • Python程序文件的拓展

    Python是一門功能豐富、易於學習、可讀性高的編程語言。Python程序文件通常以.py為文件拓展名,被廣泛應用於各種領域,包括Web開發、機器學習、科學計算等。為了更好地發揮P…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • Python 常用數據庫有哪些?

    在Python編程中,數據庫是不可或缺的一部分。隨着互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的數據庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • 為什麼用cmd運行Java時需要在文件內打開cmd為中心

    在Java開發中,我們經常會使用cmd在命令行窗口運行程序。然而,有時候我們會發現,在運行Java程序時,需要在文件內打開cmd為中心,這讓很多開發者感到疑惑,那麼,為什麼會出現這…

    編程 2025-04-29
  • Python將矩陣存為CSV文件

    CSV文件是一種通用的文件格式,在統計學和計算機科學中非常常見,一些數據分析工具如Microsoft Excel,Google Sheets等都支持讀取CSV文件。Python內置…

    編程 2025-04-29
  • Python簡單數學計算

    本文將從多個方面介紹Python的簡單數學計算,包括基礎運算符、函數、庫以及實際應用場景。 一、基礎運算符 Python提供了基礎的算術運算符,包括加(+)、減(-)、乘(*)、除…

    編程 2025-04-29
  • Python zipfile解壓文件亂碼處理

    本文主要介紹如何在Python中使用zipfile進行文件解壓的處理,同時詳細討論在解壓文件時可能出現的亂碼問題的各種解決辦法。 一、zipfile解壓文件亂碼問題的根本原因 在P…

    編程 2025-04-29

發表回復

登錄後才能評論