更新文件中的行

时间:2014-10-25 02:24:51

标签: java

之前我从未使用过文件,但我想要完成的是能够获取和设置数据。

我已经有办法获取数据了,它运行正常。 (也许不是最好的方式) 我也有办法设置数据。但问题是,当我设置数据时,它不仅可以工作,而且数据也会重复。

以下是我的变数:

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;
}

我不是要求重新编写代码。关于我应该如何解决我的问题,只需要一点提示或提示。

非常感谢所有帮助。谢谢!

0 个答案:

没有答案