在文本文件中保存和读取多种类型的设置



我想要一个设置系统,我可以从中读取、写入和使用存储在文件中的变量。总之,有一个类,该类中有一个设置列表。当我进行设置时,我想将其添加到列表中,以便以后可以将其写入文本文件。我还希望能够在不强制转换的情况下获得设置值,这将使用泛型。所以对于boolSetting,我只需要执行boolSetting.get((或boolSetting.value ect

从我已经编写的代码开始,我有代码可以读写到文件中。这很完美(我认为(。我只需要在设置部分得到帮助。这是对文件的读写操作。

package winter.settings;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import net.minecraft.src.Config;
import winter.Client;
public class WinterSettings {

public static File WinterSetting;


public static void readSettings() {
try {
File WinterSetting = new File(System.getProperty("user.dir"), "WinterSettings.txt");
BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(new FileInputStream(WinterSetting), "UTF-8"));

String s = "";
while ((s = bufferedreader.readLine()) != null)
{
System.out.println(s);
String[] astring = s.split(":");
Client.modules.forEach(m ->{
if(m.name==astring[0]) {
m.settings.forEach(setting ->{
if(setting.name==astring[1]) {
setting.value=astring[2];
}
});
}
});
}
bufferedreader.close();
} catch (IOException e) {
e.printStackTrace();
}
}



public static void writeSettings() {
try {
File WinterSetting = new File(System.getProperty("user.dir"), "WinterSettings.txt");
PrintWriter printwriter = new PrintWriter(new FileWriter(WinterSetting));
Client.modules.forEach(m ->{

m.settings.forEach(setting ->{

printwriter.println(m.name+":"+setting.name+":"+setting.value);

});

});
printwriter.close();


} catch (IOException e) {
e.printStackTrace();
}
}

}

这基本上是如何工作的,我在一个模块中有一个设置,它只存储一些信息。设置有名称和值我只是在写

模块名称、设置名称、设置值例如:ModuleName:SettingName:false

这很好,但导致了我对泛型了解不够的问题。我找不到一种适合写作、阅读和设定/获取的方法。该设置应具有名称和值。我写的一些代码在下面,我只是不知道如何继续。

public class Setting<T> {
public String name;
public T value;
public Setting(String name, T value) {
this.name = name;
this.value = value;
}
public T getValue() {
return value;
}


}

从这里开始,我为每种类型的设置都有子类。不确定这是否是一个好的编程。现在我可以设置get/write,但当我读取时,值没有正确更新。

现在我做了一个新的设置,比如

private final BooleanSetting toggleSprint =  new BooleanSetting("ToggleSprint", true);

从我的判断来看,这有一个问题。首先,当我尝试在初始化时将其添加到列表中时,我会遇到一个错误。类型不匹配:无法从boolean转换为BooleanSetting。

简而言之:我需要能够读取写get并在设置对象中设置值。这可以是布尔值/int/ect。

上面是我读/写到txt文件的一些代码。设置课程和我所做的新设置。

我的两个问题是,我正确地阅读了设置,并且在进行设置时,我无法将它们添加到列表中。

使用Boolean.True静态变量

new BooleanSetting("ToggleSprint", Boolean.TRUE);

Boolean.valueOf(true)

最新更新