【问题标题】:Storing files in HashTable在哈希表中存储文件
【发布时间】:2016-12-05 17:46:03
【问题描述】:

我正在尝试将 HTML 转换为文本的文件存储到哈希表中,以便以后检索它们。我不明白如何实现它。请帮我。如何将文本文件存储到哈希表中?

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);       
  }
}

【问题讨论】:

  • 欢迎来到stackoverflow。请参观一下如何正确提问。请将您的代码精简到最低限度以显示您的问题。你的问题到底是什么?转换 HTML?将字符串存储在数组中?你的 HashEntry 类型是什么?
  • 运行这段代码会得到什么?有没有错误?请查看How to Ask
  • 我遇到了文件未找到异常
  • @Heri,我想将转换后的 HTML 文件存储到哈希表中。我不知道该怎么做。

标签: java string hashtable


【解决方案1】:

在哈希图中存储许多大文件不是一个好主意,但如果你坚持,你可以尝试以下方法:

  1. 逐行读取每个文件并将其存储在字符串变量中
  2. 为每个字符串变量分配一个自动递增的整数值
  3. &lt;Integer, String&gt; 的对插入到哈希图中。

瞧! 现在您有了一个包含所有文件的哈希图。当然可能会出现例外情况,例如在读取反斜杠等特殊字符时......

【讨论】:

  • 感谢您的回复。将 's 对插入 hashmap 是什么意思?怎么做?我应该使用我的代码的“put”方法吗?
  • 是的@Bharadwaj,您需要使用哈希图的“put”方法。还要记住像这样声明哈希图: HashMap hmap = new HashMap ();
【解决方案2】:

为什么不将文件存储在文件系统中,而只是将文件的路径放在地图中?

【讨论】:

  • 能否用示例代码详细说明您的想法?
  • 将文件写入文件系统。不要将文件放在 hashMap 中,而是放置文件的路径。像 map.put("file1", "C:\storage\file1");
  • 但是我的 put 方法参数是 (String, Int)。我怎样才能给出一个字符串的存储位置,而不是一个整数?
  • 将您的 HashMap 创建为
猜你喜欢
  • 2017-01-22
  • 2015-07-18
  • 2015-05-26
  • 2011-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-12
  • 1970-01-01
相关资源
最近更新 更多