java hash表保存到本地文件_java-如何将HashMap保存到Android中的文件?

我正在尝试将用户设置保存到文件中,以便以后阅读.但是我无法使其正常工作.我已经尝试阅读此书,但是仍然遇到问题.

Map userSettings = new HashMap<>();

public void updateUserSettings(){

userSettings.clear();

userSettings.put("item0", item0);

userSettings.put("item1", item1);

userSettings.put("item2", item2);

userSettings.put("item3", item3);

userSettings.put("item4", item4);

userSettings.put("item5", item5);

userSettings.put("item6", item6);

userSettings.put("item7", item7);

userSettings.put("i0", Float.toString(i0));

userSettings.put("i1", Float.toString(i1));

userSettings.put("i2", Float.toString(i2));

userSettings.put("i3", Float.toString(i3));

userSettings.put("i4", Float.toString(i4));

userSettings.put("i5", Float.toString(i5));

userSettings.put("i6", Float.toString(i6));

userSettings.put("i7", Float.toString(i7));

userSettings.put("huvudMaskin", huvudMaskin);

userSettings.put("minorMaskin1", minorMaskin1);

userSettings.put("minorMaskin2", minorMaskin2);

userSettings.put("maskinTid", Float.toString(maskinTid));

writeSettings();

}

public void writeSettings() {

try

{

FileOutputStream fos = context.openFileOutput("test.ser", Context.MODE_PRIVATE);

ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeObject(userSettings);

oos.close();

} catch (IOException e) {

e.printStackTrace();

}

}

public void readSetttings() {

try

{

FileInputStream fileInputStream = new FileInputStream(context.getFilesDir()+"test.ser");

ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);

Map myHashMap = (Map)objectInputStream.readObject();

userSettings = null;

userSettings = myHashMap;

}

catch(ClassNotFoundException | IOException | ClassCastException e) {

e.printStackTrace();

}

executeSettings();

}

我对应用程序拥有读写权限.

我没有从中得到任何东西.我已经检查了哈希图,它可以按预期工作.我还尝试了许多不同的方法,而我设法上班的唯一一件事就是将字符串保存到.txt文件中.

最佳答案

private String subFolder = "/userdata";

private String file = "test.ser";

public void writeSettings() {

File cacheDir = null;

File appDirectory = null;

if (android.os.Environment.getExternalStorageState().

equals(android.os.Environment.MEDIA_MOUNTED)) {

cacheDir = getApplicationContext().getExternalCacheDir();

appDirectory = new File(cacheDir + subFolder);

} else {

cacheDir = getApplicationContext().getCacheDir();

String BaseFolder = cacheDir.getAbsolutePath();

appDirectory = new File(BaseFolder + subFolder);

}

if (appDirectory != null && !appDirectory.exists()) {

appDirectory.mkdirs();

}

File fileName = new File(appDirectory, file);

FileOutputStream fos = null;

ObjectOutputStream out = null;

try {

fos = new FileOutputStream(fileName);

out = new ObjectOutputStream(fos);

out.writeObject(userSettings);

} catch (IOException ex) {

ex.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

if (fos != null)

fos.flush();

fos.close();

if (out != null)

out.flush();

out.close();

} catch (Exception e) {

}

}

}

public void readSetttings() {

File cacheDir = null;

File appDirectory = null;

if (android.os.Environment.getExternalStorageState().

equals(android.os.Environment.MEDIA_MOUNTED)) {

cacheDir = getApplicationContext().getExternalCacheDir();

appDirectory = new File(cacheDir + subFolder);

} else {

cacheDir = getApplicationContext().getCacheDir();

String BaseFolder = cacheDir.getAbsolutePath();

appDirectory = new File(BaseFolder + subFolder);

}

if (appDirectory != null && !appDirectory.exists()) return; // File does not exist

File fileName = new File(appDirectory, file);

FileInputStream fis = null;

ObjectInputStream in = null;

try {

fis = new FileInputStream(fileName);

in = new ObjectInputStream(fis);

Map myHashMap = (Map ) in.readObject();

userSettings = myHashMap;

System.out.println("count of hash map::"+userSettings.size() + " " + userSettings);

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (StreamCorruptedException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

}finally {

try {

if(fis != null) {

fis.close();

}

if(in != null) {

in.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值