Java:我清空ArrayList从中获取其内容的文本文件后,我的ArrayList便自动清空

时间:2018-10-02 11:13:30

标签: java arraylist

我正在用Java编写自己的库,您可以在其中非常简单地保存变量。但是我在更改变量的值时遇到问题。一旦txt文件为空,则ArrayList将清空。 我的代码:

"Serilog": {
    "MinimumLevel": "Information",
    "Override": {
      "Microsoft": "Critical",
    },
    "WriteTo": [
      {
        "Name": "MSSqlServer",
        "Args": {
          "connectionString": "Server=.\\SQLEXPRESS;Database=App-7661DEE4-C53F-4E49-B140-2AFAA2C85927;Integrated Security=True;Trusted_Connection=True;MultipleActiveResultSets=true;",
          "schemaName": "App",
          "tableName": "EventLogs"
        }
      }
    ]
  },

这是我的SaveGameReader类:

    public class SaveGameWriter {
    private File file;
    private boolean closed = false;
    public void write(SaveGameFile savegamefile, String variableName, String variableValue, SaveGameReader reader) throws FileNotFoundException
    {
        if(!reader.read(savegamefile).contains(variableName))
        {
        file = savegamefile.getFile();
        OutputStream stream = new FileOutputStream(file, true);
        try {
            String text = variableName+"="+variableValue;
            stream.write(text.getBytes());
            String lineSeparator = System.getProperty("line.separator");
            stream.write(lineSeparator.getBytes());
        }catch(IOException e)
        {}
        do {
            try {
                stream.close();
                closed = true;
            } catch (Exception e) {
                closed = false;
            }
        } while (!closed);
        }
    }

    public void setValueOf(SaveGameFile savegamefile, String variableName, String Value, SaveGameReader reader) throws IOException
    {
        ArrayList<String> list = reader.read(savegamefile);
        if(list.contains(variableName))
        {
            list.set(list.indexOf(variableName), Value);
            savegamefile.clear();
            for(int i = 0; i<list.size()-1;i+=2)
            {
                write(savegamefile,list.get(i),list.get(i+1),reader);
            }
        }
    }
}

还有我的SaveGameFile类:

    public class SaveGameReader {
    private File file;
    private ArrayList<String> result = new ArrayList<>();
    public String getValueOf(SaveGameFile savegamefile, String variableName)
    {
        ArrayList<String> list = read(savegamefile);
        if(list.contains(variableName))
        {
            return list.get(list.indexOf(variableName)+1);
        }else
            return null;
    }
    public ArrayList<String> read(SaveGameFile savegamefile) {
        result.clear();
        file = savegamefile.getFile();
        BufferedReader in = null;
        try {
            in = new BufferedReader(new FileReader(file));
            String read = null;
            while ((read = in.readLine()) != null) {

                String[] splited = read.split("=");
                for (String part : splited) {
                    result.add(part);
                }
            }
        } catch (IOException e) {
        } finally {
            boolean closed = false;
            while(!closed)
            {
            try {
                in.close();
                closed=true;
            } catch (Exception e) {
                closed=false;
            }
            }
        }
        result.remove("");
        return result;
    }
}

因此,当我调用 public class SaveGameFile { private File file; public void create(String destination, String filename) throws IOException { file = new File(destination+"/"+filename+".savegame"); if(!file.exists()) { file.createNewFile(); } } public File getFile() { return file; } public void clear() throws IOException { PrintWriter pw = new PrintWriter(file.getPath()); pw.close(); } } 方法时,ArrayList为空,而在txt文件中,只有第一个变量+值。 Hier的数据结构:

setValueOf()

我的代码有什么问题?

1 个答案:

答案 0 :(得分:1)

在您的SaveGameReader.read()方法中,您有result.clear();清除了ArrayList。您甚至可以在打开文件之前执行此操作。因此,基本上,在每次从文件读取操作之前,您都要清理现有状态并从文件中重新读取。如果文件为空,则以空列表结束