Java 如何读取文件中写入的LinkedHashMap?
我想从.txt文件中写入的LinkedHashMap中读取特定值,但显示“java.io.StreamCorruptedException:无效流头:7B495020” 为了在LinkedHashMap中写作,我尝试了这种方法Java 如何读取文件中写入的LinkedHashMap?,java,serialization,deserialization,readfile,Java,Serialization,Deserialization,Readfile,我想从.txt文件中写入的LinkedHashMap中读取特定值,但显示“java.io.StreamCorruptedException:无效流头:7B495020” 为了在LinkedHashMap中写作,我尝试了这种方法 public void WriteBasicInfo(String name, String pass) throws IOException, ParseException { Map<String, String> m; try {
public void WriteBasicInfo(String name, String pass) throws IOException, ParseException {
Map<String, String> m;
try {
m = new LinkedHashMap<String, String>();
m.put("Name", name);
m.put("Password", pass);
BufferedWriter bw = new BufferedWriter(new FileWriter(FILE_NAME, false));
bw.write(m.toString());
bw.flush();
bw.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void WriteBasicInfo(字符串名称,字符串传递)抛出IOException,ParseException{
地图m;
试一试{
m=新LinkedHashMap();
m、 放置(“名称”,名称);
m、 输入(“密码”,通过);
BufferedWriter bw=新的BufferedWriter(新的FileWriter(文件名,false));
write(m.toString());
bw.flush();
bw.close();
}捕获(例外情况除外){
例如printStackTrace();
}
}
并成功写入文件。但是当我试图用这个方法读取上面的hashmap时
public void readBasicInfo() throws IOException, ParseException, InvocationTargetException, ClassNotFoundException
{
ObjectInputStream is = new ObjectInputStream(new FileInputStream(FILE_NAME));
Map<String, String> myMap=(LinkedHashMap<String, String>) is.readObject();
for(Map.Entry<String,String> m :myMap.entrySet()){
System.out.println(m.getKey()+" : "+m.getValue());
// String val1=m.get("Name");
}
ois.close();
}
public void readBasicInfo()抛出IOException、ParseException、InvocationTargetException、ClassNotFoundException
{
ObjectInputStream is=新ObjectInputStream(新文件输入流(文件名));
Map myMap=(LinkedHashMap)是.readObject();
对于(Map.Entry m:myMap.entrySet()){
System.out.println(m.getKey()+“:”+m.getValue());
//字符串val1=m.get(“名称”);
}
ois.close();
}
它显示“java.io.StreamCorruptedException:invalid stream header:7B495020”,未读取任何数据
我试着阅读hashmap中写的所有条目,以检查它是否正在阅读;但实际上,我只想要存储在hashmap中的只读“name”条目。您很简单:以字符串形式写入,但回读时需要一个二进制序列化对象 你知道,这就像:你把一个鸡蛋放在一个盒子里,然后你期望你能打开那个盒子,把牛奶从里面倒进杯子里!那不行 在这里: 将映射作为原始字符串写入该文件。这意味着您的文件现在包含人类可读的字符串 但你会:
Map<String, String> myMap=(LinkedHashMap<String, String>) is.readObject();
Map myMap=(LinkedHashMap)是.readObject();
它期望文件包含序列化对象
长话短说,以下是您的选择:
我的建议是:选择2号或3号选项。2为第三方库添加了依赖项,但我认为这是目前比较“常见”的做法 您需要序列化/反序列化对象,而不仅仅是将其toString表示形式读/写到文件中
请参阅:您需要序列化/反序列化对象,而不仅仅是读取/写入对象的
toString
表示形式到文件。请看:感谢您为我指明了正确的方向。!!通过hashmap中对象的序列化/反序列化解决。很抱歉,我想我只是在阅读您的答案,并遵循您提供的教程链接,同时获得了另一个链接(您也提供了),因为您那边有及时的响应。我没有办法给你们两票,但我首先要感谢你们。!
Map<String, String> myMap=(LinkedHashMap<String, String>) is.readObject();