2013-07-10 2 views
1

Я работаю над простым редактором уровней для своей Android-игры. Я написал графический интерфейс (который рисует сетку) с помощью swing. Вы нажимаете на квадраты, где вы хотите поместить плитку, и она меняет цвет. Как только вы закончите, вы пишете все в файл.Чтение значений Integer из файла (Java)

Мой файл состоит из чего-то вроде следующего (это просто пример):

enter image description here

Я использую звездочки, чтобы определить номер уровня был прочитан и дефис, чтобы сказать читателю, чтобы остановить чтение ,

Прочитайте мой файл . Код приведен ниже, если выбрать, какую часть читать работает ОК - например. если я прохожу в 2, выполнив следующие действия:

readFile(2); 

Затем он печатает все символы во 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"); 
       } 


    } 

ответ

2

Сканер - хороший ответ. Для того, чтобы оставаться ближе к тому, что у вас есть, использовать BufferedReader читать целые строки (вместо чтения одного символа в то время) и Integer.parseInt для преобразования из строки в целое:

// get to starting position 
BufferedReader r = new BufferedReader(isr); 
... 
String line = null; 
while (!(line = reader.readLine()).equals("-")) 
{ 
    int number = Integer.parseInt(line); 
} 
+0

Спасибо! это отлично работает :-) – Zippy

0

Я думаю, вы должны смотреть на API сканера в Java. Вы можете посмотреть на их tutorial

1

Если вы используете BufferedReader и не интерфейс Reader, вы можете позвонить r.readLine(). Затем вы можете просто использовать Integer.valueOf(String) или Integer.parseInt(String).

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

Вам также нужно некоторый код там обрабатывать ошибки, включая преждевременный конец файла.

Смежные вопросы