java - 无法将文件内容正确保存到 HashMap 中

标签 java android hash

我试图将文件中存在的内容插入到 HashMap 中。我找到了一种方法来做到这一点。但是,我没有得到我想要的输出。下面提到的是尝试加载文件的代码内容放入 HashMap 中。

public static void main (String [] args)
{

    try {

        StringBuffer fileData = new StringBuffer(1000);
        BufferedReader reader = new BufferedReader(new FileReader("xxxxxxx"));
        char[] buf = new char[1024];

        int numRead=0;
        while((numRead=reader.read(buf)) != -1){
            String readData = String.valueOf(buf, 0, numRead);
            fileData.append(readData);
            buf = new char[1024];
        }

        reader.close();
        Map map = new HashMap();
         System.out.println(fileData.toString());->(1)

        StringTokenizer stringTokenizer = new  
         StringTokenizer(fileData.toString());
        while (stringTokenizer.hasMoreTokens())
        {
            map.put(stringTokenizer.nextToken().toString(),stringTokenizer.nextToken().toString());
        }

        Iterator iterator = map.entrySet().iterator();
        while(iterator.hasNext())
        {
            Map.Entry m = (Map.Entry)iterator.next();
            System.out.println("key"+m.getKey());->(2)
            System.out.println("value"+m.getValue());->(3)

        }
    }

    catch (Exception ex)
    {
      ex.printStackTrace();
    }



}

当我从代码中提到的等式 1 打印时。我得到了所需的输出(即路径作为键,散列作为值):

C:\Users\rishii\Desktop\input_3\com.AmazingBullshit.Holy_1.03.apk
66ec456315a7e6c9338b0387171ca89e
C:\Users\rishii\Desktop\input_3\com.amazon.venezia_release   
13.0003.844.1C_6430003104.apk
266796d1b8e2e016753ee3bf1b50e591 
C:\Users\rishii\Desktop\input_3\com.android.browser_4.4.2- 
eng.build.20150616.1901504.apk
4aa2091b0e21fc655e19d07e2ae20982
C:\Users\rishii\Desktop\input_3\com.android.calculator2_4.4.2- 
eng.build.20150616.1901504.apk
85313ccbd39a43952906b70b941d321b
C:\Users\rishii\Desktop\input_3\com.android.calendar_4.4.2- 
eng.build.20150616.1901504.apk
3c85cb87f2e134a4157e5f3747e4df1b
C:\Users\rishii\Desktop\input_3\com.android.camera2_2.0.002   
(eng.build.ef73894.060315_142358-70)4.apk
482205cda6991f89fb35311dea668013

但是,当我将其保留在 HashMap 中并尝试打印它(使用 eq(2) 和 eq(3))时,我得到了不同的输出。

  key:
  dd383abe48e591f40504cbb4dff80958
  value:
   C:\Users\rishii\Desktop\input_3\com.android.quicksearchbox_4.4.2- 
   eng.build.20150616.1901504.apk
 key:
 482205cda6991f89fb35311dea668013
 value:
 C:\Users\rishii\Desktop\input_3\com.android.contacts_4.4.2-  
 eng.build.20150616.1901504.apk
 key:
 C:\Users\rishii\Desktop\input_3\com.AmazingHolyBull_1.03.apk
 value:
 66ec456315a7e6c9338b0387171ca89e

如果您可以观察到输出已更改。特别是在上述输出的最后两行中,其中“键条目是路径”和“值条目是哈希”。我无法弄清楚 HashMap 给出奇怪输出的确切原因。我期望输出看起来像这样:

Key:.apk文件的路径 值:.apk 文件的哈希值。 与第一个输出类似。

下面附上它在输入文件中的方式。

 C:\Users\rishii\Desktop\baal\apuslauncher-1.apk
 af05322cf2c682e8c04a0fb9441867f1
 C:\Users\rishii\Desktop\baal\apuslauncher-2.apk 
 af05322cf2c682e8c04a0fb9441867f1 
 C:\Users\rishii\Desktop\baal\apuslauncher.apk
af05322cf2c682e8c04a0fb9441867f1

任何建议都会非常有帮助!

最佳答案

正如评论中提到的,只需使用 BufferedReader.readLine() 方法:

// Load file into map
Map<String, String> map = new HashMap<>();
try (BufferedReader reader = new BufferedReader(new FileReader("xxxxxxx"))) {
    String path, hash;
    while ((path = reader.readLine()) != null) {
        if ((hash = reader.readLine()) == null)
            throw new IllegalArgumentException("Found path without hash");
        map.put(path, hash);
    }
}

// Print map
for (Entry<String, String> entry : map.entrySet()) {
    System.out.println("path: " + entry.getKey());
    System.out.println("hash: " + entry.getValue());
}

关于java - 无法将文件内容正确保存到 HashMap 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33226600/

相关文章:

android - 火力地堡安卓 : handle deep links

mysql - 可重复生成有限制的个人 ID

java - 使用 hashCode 获取数组 java 元素的索引

php - 什么密码强度被认为足以与 password_hash 函数一起使用?

Java字符串替换电话号码中无效字符的正则表达式

java - 如果其中的对象过多,开发服务器上的数据存储访问速度会非常慢

java - 安卓 2.2 : How to make an app to run automaticly on startup & how to make an app start another app

android - 从命令提示符创建 apk 文件

java - IntelliJ 是否有像 Eclipse 一样的 "Diff Summary View"(结构比较)?

java - 使用 StringBuffer 构建更高效的 SQL 插入