2016-12-05 82 views
0

我想將HTML到文本轉換後的文件存儲到哈希表中以便稍後檢索它們。我不理解如何實施它。請幫幫我。我如何將文本文件存儲到哈希表中?在HashTable中存儲文件

package hashTable; 
import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.math.BigInteger; 
import java.util.Scanner; 

import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 


public class HashMap { 
    // Setting table size to a max of 32, value used to modulus for hash value. 
    private final static int TABLE_SIZE = 32; 

    HashEntry[] table; 

    HashMap() { 
     table = new HashEntry[TABLE_SIZE]; 
     for (int i = 0; i < TABLE_SIZE; i++) 
       table[i] = null; 
    } 

    /* function to retrieve value from the table according to key */ 
    public int get(String key) { 
     int hash = new BigInteger(toAscii(key)).mod(new BigInteger(((Integer)TABLE_SIZE).toString())).intValue(); 
     while (table[hash] != null && table[hash].getKey() != key) 
       hash = (hash + 1) % TABLE_SIZE; 
     if (table[hash] == null) 
       return -1; 
     else 
       return table[hash].getValue(); 
    } 

    /* function to add value to the table */ 
    public void put(String key, int value) { 
     //creating hash code using key value given as a string 
     int hash = new BigInteger(toAscii(key)).mod(new BigInteger(((Integer)TABLE_SIZE).toString())).intValue(); 
     while (table[hash] != null && table[hash].getKey() != key) 
       hash = (hash + 1) % TABLE_SIZE; 
     table[hash] = new HashEntry(key, value); 
    } 

    /* value to create the Hash code from he name entered, basically converting name to ASCII */ 
    public static String toAscii(String s){ 
     StringBuilder sb = new StringBuilder(); 
     long asciiInt; 
     // loop through all values in the string, including blanks 
     for (int i = 0; i < s.length(); i++){ 
      //getting Ascii value of character and adding it to the string. 
      char c = s.charAt(i); 
      asciiInt = (int)c; 
      sb.append(asciiInt); 
     } 
     return String.valueOf(sb); 
    } 
     public void HtmltoText(String fn){ 
     try{ 
     String uri="C:/Users/Bharadwaj/Downloads/W3C Web Pages"; 
     BufferedReader in = new BufferedReader(new FileReader(uri)); 
     String st=new String(); 
     String str; 
     while((str=in.readLine())!=null){ 
      st += "\n" + str.replace("<br", "\n<br"); 
         }   
     Document s=Jsoup.parse(st); 
     // System.out.println(s1); 
     String text=s.text(); 
     // System.out.println(filename.substring(0,filename.length()-4)); 
     String txtpath="C:/Users/Bharadwaj/Downloads/W3C Web Pages/Text"; 
     System.out.println(text); 
     String newname=txtpath+fn.substring(0,(fn.length()-4))+".txt";   
     BufferedWriter writerTxt = new BufferedWriter(new FileWriter(newname)); 
     writerTxt.write(text); 
     writerTxt.close();      
     }catch(Exception e){ 
      e.printStackTrace(); 
     }  
    } 

    public static void main(String[]args) throws IOException{ 
    HashMap entry = new HashMap(); 
    String uri="C:/Users/Bharadwaj/Downloads/W3C Web Pages"; 
    File fil=new File(uri); 
    System.out.println(fil); 
    entry.HtmltoText(uri);  
    } 
} 
+0

歡迎使用stackoverflow。請參考如何正確提問。請將您的代碼降到最低,以顯示您的問題。你的問題到底是什麼?轉換HTML?在數組中存儲一個字符串?什麼是你的HashEntry類型? – Heri

+0

當你運行這段代碼時,你會得到什麼?有沒有錯誤?請查看[問]。 – Fencer04

+0

我收到了文件未找到異常 – Bharath

回答

0

這是不是這樣存儲在一個HashMap許多大型文件是個好主意,但如果你堅持,你可以嘗試以下方法:

  1. 逐行讀取每個文件行並將其存儲在一個字符串變量
  2. 爲每個字符串變量指定一個自動遞增的整數值
  3. <Integer, String>對的對插入到散列映射中。

瞧! 現在你有一個包含所有文件的散列表。當然,例外情況可能會發生,例如在閱讀特殊字符(如反斜槓等)時...

+0

謝謝你的回覆。通過在hashmap中插入成對的字符意味着什麼?怎麼做?我應該使用我的代碼的「put」方法嗎? – Bharath

+0

是@Bharadwaj,你需要使用hashmap的「put」方法。並且要記住像這樣聲明hashmap:HashMap hmap = new HashMap <>(); –

0

爲什麼不將文件存儲在filesytem中,只是將文件的路徑放在地圖中?

+0

請問您是否可以用示例代碼來詳細說明您的想法? – Bharath

+0

將文件寫入文件系統。而不是把文件放在hashMap中,把路徑放到文件中。像map.put(「file1」,「C:\ storage \ file1」); –

+0

但我的put方法參數是(String,Int)。我怎樣才能給一個字符串的存儲位置,在一個整數的地方? – Bharath