Java - чтение целых чисел со знаком из файла - PullRequest
0 голосов
/ 29 марта 2012

Я пытаюсь прочитать 10 целых чисел со знаком из файла в массив, и по какой-то причине этого не происходит, и я не получаю никаких ошибок при компиляции и во время выполнения. Я просто хотел, чтобы вторая пара глаз посмотрела на это и увидела, чего мне не хватает.

Файл теста представляет собой «input.txt» и содержит: -1, 4, 32, 0, -12, 2, 30, 1, -3, -32

Вот мой код:

  public void readFromFile(String filename)
  {
     try {
        File f = new File(filename);
        Scanner scan  = new Scanner(f);
        String nextLine;
        int[] testAry = new int[10];
        int i = 0;

        while (scan.hasNextInt())
        {
           testAry[i] = scan.nextInt();
           i++;
        }
     }
        catch (FileNotFoundException fnf)
        {
           System.out.println(fnf.getMessage());
        }
  } 

Ответы [ 2 ]

2 голосов
/ 29 марта 2012

Вы используете разделитель по умолчанию для объекта Scanner.

попробуйте использовать разделитель ive, полученный в строке useDelimiter (\\ s *, \\ s * "). Его регулярное выражение разделяет ваш вводиз файла запятой.


 try {
            File f = new File("input.txt");
            Scanner scan = new Scanner(f);
            scan.useDelimiter("\\s*,\\s*");
            String nextLine; //left it in even tho you are not using it
            int[] testAry = new int[10];
            int i = 0;

            while (scan.hasNextInt()) {
                testAry[i] = scan.nextInt();
                System.out.println(testAry[i]);
                i++;
            }
        } catch (FileNotFoundException fnf) {
            System.out.println(fnf.getMessage());
        }

0 голосов
/ 29 марта 2012

Вы могли бы выдать другое исключение, которое вы не ловите

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html#nextInt()

int, отсканированный с входных данных Броски:

InputMismatchException - if the next token does not match the Integer regular expression, or is out of range
NoSuchElementException - if input is exhausted
IllegalStateException - if this scanner is closed

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

try{

  FileInputStream fstream = new FileInputStream(filename);

  DataInputStream in = new DataInputStream(fstream);
  BufferedReader br = new BufferedReader(new InputStreamReader(in));
  String strLine;

  while ((strLine = br.readLine()) != null)   {

    System.out.println (strLine);
  }
  in.close();
  }catch (Exception e){
    System.err.println("Error: " + e.getMessage());
   }
...