如何为文件中的每个单词循环并生成哈希键

时间:2012-08-08 10:14:50

标签: java md5

我可以知道如何循环以便我可以为文件中的所有单词(.txt)生成哈希码吗? 我已经能够为该文件生成单个哈希码。

给定循环读取并取出文本文档中的单词。 但是我无法循环生成哈希键。

public static void main(String[] args) throws NoSuchAlgorithmException, IOException { 

  JFileChooser chooser=new  JFileChooser();
  int returnVal = chooser.showOpenDialog(null);
  if (returnVal == JFileChooser.APPROVE_OPTION) {
    File f = chooser.getSelectedFile();
  }
  FileInputStream fin = new FileInputStream(chooser.getSelectedFile());
  DataInputStream din = new DataInputStream(fin);    
  BufferedReader br = new BufferedReader(new InputStreamReader(din)); 

  ArrayList<String> list = new ArrayList<String> ();
  MessageDigest md = MessageDigest.getInstance("MD5");

  String currentLine;
  byte[] buf = new byte[8192];

  int len = 0;
  while ((currentLine = br.readLine()) != null) {
    list.add(currentLine);
    md.update(buf, 0, len);
    System.out.println(currentLine);
  }
  br.close();

  byte[] bytes = md.digest();

  StringBuilder sb = new StringBuilder(2 * bytes.length);
  for (byte b : bytes) {
    sb.append("0123456789ABCDEF".charAt((b & 0xF0) >> 4));
    sb.append("0123456789ABCDEF".charAt((b & 0x0F)));
  }
  String hex = sb.toString();

  System.out.println (buf);
  System.out.println(sb);
}

3 个答案:

答案 0 :(得分:1)

按照以下步骤操作。

  1. 逐行阅读。
  2. split(空格)上获得\\s+行。
  3. 现在你有数组中的所有单词,然后迭代它。
  4. 对于每个字符串(word),请致电word.hashCode()

答案 1 :(得分:1)

尝试使用这样的标记器:

StreamTokenizer tokenizer = new StreamTokenizer(new FileReader("yourFilePath.txt"));
tokenizer.eolIsSignificant(false);
int token = tokenizer.nextToken();
while (token != StreamTokenizer.TT_EOF) {
    if (token == StreamTokenizer.TT_WORD) {
        System.err.println(tokenizer.sval.hashCode()); // here use any hash method you like
    }
    token = tokenizer.nextToken();
}

答案 2 :(得分:0)

您生成文件中所有的列表,然后您似乎永远不会使用它。也许你应该通过在空格上分割每一行来生成文件中所有单词的列表;

for (String word : currentLine.split("\\s+")) {
  list.add(word);
}

然后,您可以使用此列表为每个单词创建哈希列表;

List<byte[]> hashes = new ArrayList<byte[]>(list.size());
for (String word : list) {
  md.reset();
  hashes.add(md.digest(word));
}