所以,我正在尝试为项目设置一个简单的配置。这里的目标是从文件中读取某些值,如果文件不存在,则写入所述文件。目前,该文件的创建工作正常,但我的扫描仪表现得有点滑稽。当我到达代码时
case“resolution”:resolution = readConfig.next();
它使分辨率的值为“1024x768 \ nvsync”,而它应该只是“1024x768”。如果它按照我的计划工作,那么
的下一个值readingConfig = readConfig.next();
在我的while循环开头的将是“vsync”,然后我的switch语句将捕获并继续将值编辑为文件的值。
为什么我的扫描仪会在文本文档的下一行“输入”的“\ n”上接收?
public static void main(String[] args) {
int musicVol = 0;
int soundVol = 0;
String resolution = null;
boolean vsync = false;
Scanner readConfig;
String readingConfig;
File configFile = new File(gameDir + "\\config.txt");
if (configFile.exists() != true) {
try {
configFile.createNewFile();
PrintWriter writer = new PrintWriter(gameDir + "\\config.txt");
writer.write("resolution = 1024x768 \n vsync = true \n music = 100 \n sound = 100");
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
readConfig = new Scanner(configFile);
readConfig.useDelimiter(" = ");
while (readConfig.hasNext()) {
readingConfig = readConfig.next();
switch (readingConfig) {
case "resolution":
resolution = readConfig.next();
break;
case "vsync":
vsync = readConfig.nextBoolean();
break;
case "music":
musicVol = readConfig.nextInt();
break;
case "sound":
soundVol = readConfig.nextInt();
break;
}
}
readConfig.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
答案 0 :(得分:1)
您使用的next()
不会划分您的行,请尝试使用nextLine()
:
String nextLine ()使此扫描程序超过当前行和 返回跳过的输入。
我建议不使用分隔符,而是将整行替换为字符串,然后将字符串拆分为所需的部分。
像
这样的东西String nextLine = readConfig.nextLine();
String[] split = nextLine.split(" = ");
String resolution = split[1]; // just an example
...
答案 1 :(得分:1)
您必须使用.hasNextLine()和.nextLine(),而不是使用.hasNext和.next()。我会把它写成评论,但还没有得到代表评论。
答案 2 :(得分:0)
这样做是将整个文本文件拉成一个字符串(使用Scanner.nextLine()删除'\ n'),然后在每行的末尾添加“=”。因此,当扫描程序在交换机的字符串上运行时,它将忽略“=”并从字符串中提取所需的信息。
String config = "";
try {
readConfig = new Scanner(configFile);
while (readConfig.hasNext()) {
config += readConfig.nextLine() + " = ";
readConfig = new Scanner(config);
readConfig.useDelimiter(" = ");