我正在为我的Android游戏开发一个简单的关卡编辑器。我使用swing编写了GUI(绘制网格)。单击要放置图块的方块,它会更改颜色。完成后,将所有内容写入文件。
我的文件包含以下内容(这只是一个示例):
我使用星号来确定正在读取的级别编号和连字符,以告诉读者停止阅读。
我的文件读取代码如下所示,选择要阅读的部分可以正常工作 - 例如。如果我通过执行以下操作传入2:
readFile(2);
然后它打印第二部分中的所有字符
我无法弄清楚的是,一旦我进入'开始'点,我如何实际读取数字整数和不个人字符?
代码
public void readFile(int level){
try {
//What ever the file path is.
File levelFile = new File("C:/Temp/levels.txt");
FileInputStream fis = new FileInputStream(levelFile);
InputStreamReader isr = new InputStreamReader(fis);
Reader r = new BufferedReader(isr);
int charTest;
//Position the reader to the relevant level (Levels are separated by asterisks)
for (int x =0;x<level;x++){
//Get to the relevant asterisk
while ((charTest = fis.read()) != 42){
}
}
//Now we are at the correct read position, keep reading until we hit a '-' char
//Which indicates 'end of level information'
while ((charTest = fis.read()) != 45){
System.out.print((char)charTest);
}
//All done - so close the file
r.close();
} catch (IOException e) {
System.err.println("Problem reading the file levels.txt");
}
}
答案 0 :(得分:2)
扫描仪是一个很好的答案。为了更接近你所拥有的,使用BufferedReader读取整行(而不是一次读取一个字符)和Integer.parseInt从String转换为Integer:
// get to starting position
BufferedReader r = new BufferedReader(isr);
...
String line = null;
while (!(line = reader.readLine()).equals("-"))
{
int number = Integer.parseInt(line);
}
答案 1 :(得分:1)
如果您使用的是BufferedReader
而非Reader
界面,则可以拨打r.readLine()
。然后,您只需使用Integer.valueOf(String)
或Integer.parseInt(String)
。
答案 2 :(得分:1)
也许您应该考虑使用readLine
将所有字符放在行尾。
这部分:
for (int x =0;x<level;x++){
//Get to the relevant asterisk
while ((charTest = fis.read()) != 42){
}
}
可以改为:
for (int x =0;x<level;x++){
//Get to the relevant asterisk
while ((strTest = fis.readLine()) != null) {
if (strTest.startsWith('*')) {
break;
}
}
}
然后,要读取另一个循环的值:
for (;;) {
strTest = fls.readLine();
if (strTest != null && !strTest.startsWith('-')) {
int value = Integer.parseInt(strTest);
// ... you have to store it somewhere
} else {
break;
}
}
你还需要一些代码来处理错误,包括文件的过早结束。
答案 3 :(得分:0)
我认为您应该查看Java中的Scanner API。 您可以查看他们的tutorial