之前我从未使用过文件,但我想要完成的是能够获取和设置数据。
我已经有办法获取数据了,它运行正常。 (也许不是最好的方式) 我也有办法设置数据。但问题是,当我设置数据时,它不仅可以工作,而且数据也会重复。
以下是我的变数:
private File file;
private FileReader fr;
private BufferedReader reader;
private Formatter f;
private Map<String, String> dataList = new HashMap<String, String>();
private List<String> itemList;
这是我用来检索数据的:
public void getData() {
String line = null;
openFileReader();
BufferedReader buffReader = new BufferedReader(fr);
StringBuffer sb = new StringBuffer();
try {
while((line = buffReader.readLine()) != null) {
sb.append(line);
sb.append("\n");
}
String[] items = sb.toString().split("\n");
itemList = new ArrayList<String>(Arrays.asList(items));
for(String item : itemList) {
String[] itemData = item.split(":");
if(!(buffReader.readLine() == null)) {
dataList.put(itemData[0], itemData[1]);
}
}
} catch (IOException e) {
e.printStackTrace();
}
closeFileReader();
}
以下是我用来设置数据的内容:
我的方法是获取并将数据存储在arraylist / hashmap中,删除文件,创建文件,删除我不想要的行,然后将所有数据设置到文件中。
public void set(String section, String data) {
openFileWriter();
if(hasKey(section)) {
file.delete();
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
for(Map.Entry<String, String> entry : dataList.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
//I don't think this block actually works...
String beforeStringOfData = key + ":" + value;
dataList.remove(section);
if(itemList.contains(beforeStringOfData)) {
itemList.remove(beforeStringOfData);
}
String finalStringOfData = section + ":" + data;
itemList.add(finalStringOfData);
dataList.put(section, data);
for(String items : itemList) {
f.format("%s%n", items);
}
}
} else {
dataList.put(section, data);
String finalStringOfData = section + ":" + data;
itemList.add(finalStringOfData);
for(String i: itemList) {
f.format("%s%n", i);
}
}
closeFileWriter();
}
private boolean hasKey(String key) {
if(dataList.containsKey(key))
return true;
return false;
}
我不是要求重新编写代码。关于我应该如何解决我的问题,只需要一点提示或提示。
非常感谢所有帮助。谢谢!