我试图将文件中存在的内容插入到 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/