NumberFormatException с файловым вводом-выводом

Я продолжаю получать исключение NumberFormatException, которое, как я понимаю, возникает из-за преобразования строки. Я конвертирую st.nexttoken в двойной с помощью Double.parseDouble. Любая помощь приветствуется!

import java.io.*;
import java.util.*;

public class FileIO {

    public static void main(String[] args) throws Exception {
        double sum = 0, next ;
        int ctr = 0;
        String line;  
        String filename = "numbers.txt";
        StringTokenizer st;
        PrintWriter outFile = new PrintWriter("output.txt");
        outFile.println("Output File");
        try{
            Scanner inFile = new Scanner(new FileReader (filename));
            while (inFile.hasNext())
            {
                line = inFile.nextLine();
                st = new StringTokenizer(line);
                while (st.hasMoreTokens()){
                    next = Double.parseDouble(st.nextToken());
                    sum += next;
                    ctr++;
                    System.out.println(next);
                    outFile.println(next);
                }
            }
            System.out.println("number of doubles read is " + ctr);
            System.out.println("average is " + sum/(double)ctr);
            outFile.println("number of doubles read is " + ctr);
            outFile.println("average is " + sum/(double)ctr);
            outFile.close();
        }
        catch(FileNotFoundException e){
            System.out.println("The file numbers.txt was not found");
        }
        catch(NumberFormatException e){
            System.out.println("sorry - number format error");
            System.out.println(e);
        }
    }
}

Ошибка от NetBeans гласит: извините - ошибка формата числа java.lang.NumberFormatException: для входной строки: «Вывод»

Numbers.txt содержит несколько целых чисел, а также двойные числа с десятичными точками.

output.txt пуст, но сохраняется по тому же пути к файлу, что и number.txt.

Вот тело number.txt по запросу. 13 12 15 3

74.4 67.3 43.8 77.7 233.4 678.9


person JKolb    schedule 24.11.2015    source источник
comment
Попробуйте распечатать наш токен перед его преобразованием, чтобы узнать, действительно ли токен является числом.   -  person Bimde    schedule 24.11.2015
comment
Не могли бы вы опубликовать number.txt в вопросе? У вас может быть слово Output внутри. Кстати, вы никогда не закрываете входной файл.   -  person Keammoort    schedule 24.11.2015
comment
опубликуйте содержимое number.txt, в противном случае все, что люди могут сделать, это предложить предложения по отладке.   -  person Andy Guibert    schedule 24.11.2015
comment
Я добавил number.txt внизу. Я проверил, внутри нет слова Output.   -  person JKolb    schedule 25.11.2015
comment
Вот e.printStackTrace() java.lang.NumberFormatException: для входной строки: вывод в sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043) в sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110) в java.lang.Double.parseDouble(Double.java:538) в FileIO.main(FileIO.java:27)   -  person JKolb    schedule 25.11.2015


Ответы (1)


public static void main(String[] args) throws Exception {
    double sum = 0, next ;
    int ctr = 0;
    String line;
    String filename = "numbers.txt";
    StringTokenizer st;
    PrintWriter outFile = new PrintWriter("output.txt");
    outFile.println("Output File");
    try{
        Scanner inFile = new Scanner(new FileReader(filename));
        while (inFile.hasNext())
        {
            line = inFile.nextLine();
            st = new StringTokenizer(line);
            while (st.hasMoreTokens()){
                next = Double.parseDouble(st.nextToken());
                sum += next;
                ctr++;
                System.out.println(next);
                outFile.println(next);
            }
        }
        System.out.println("number of doubles read is " + ctr);
        System.out.println("average is " + sum/(double)ctr);
        outFile.println("number of doubles read is " + ctr);
        outFile.println("average is " + sum/(double)ctr);
        outFile.flush();
        inFile.close();
        outFile.close();
    }
    catch(FileNotFoundException e){
        System.out.println("The file numbers.txt was not found");
    }
    catch(NumberFormatException e){
        System.out.println("sorry - number format error");
        System.out.println(e);
    }
}

Выше приведена модифицированная версия вашего кода, и она отлично работает с указанным ниже номером .txt.

Вам нужно использовать flush(), чтобы записать его в конечный пункт назначения.

Вот номер.txt

12 12.0 12
12 32 56
34
34.0
person Prabhakaran    schedule 24.11.2015
comment
Тем не менее вы получаете исключение NumberFormatException? - person Prabhakaran; 25.11.2015
comment
Тем не менее вы получаете исключение NumberFormatException? Если вы получаете ту же ошибку, о которой вы упомянули, ваш файл может содержать некоторую строку. Проверьте, ссылаетесь ли вы на тот же файл, который вы упомянули. Я делал много раз, ссылаясь на неправильный файл. чтобы избежать путаницы, используйте полный путь и тест. Просто чтобы убедиться. - person Prabhakaran; 25.11.2015