Java BufferedReader ведет себя странно - PullRequest
0 голосов
/ 15 мая 2018

Не могу понять, почему bufferedreader не читает следующую строку в моем файле. Он продолжает возвращать пустую строку. Я поместил читателя в цикл в правильном формате. Мой текстовый файл не содержит никаких специальных символов. Он содержит только цифры и некоторые строки, разделенные пробелами. Я не понимаю.

//Read from file method
public void readFile(File x) throws IOException{
    File rFile = x;
    String fileLine;
    Transaction holder;
    int Type;
    //This will destroy the current account to add in the new one
    //Main.$acct.destroyTrans();

    try {
        // FileReader reads text files in the default encoding.
        FileReader fileReader = new FileReader(rFile);

        // Always wrap FileReader in BufferedReader.
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        //Gathering initial information about account
        Main.$acct.setName(bufferedReader.readLine());
        Main.$acct.setBalance(Double.parseDouble(bufferedReader.readLine()));
        Main.$acct.setTransCount(Integer.parseInt(bufferedReader.readLine()));
        Main.$acct.setSC(Double.parseDouble(bufferedReader.readLine()));
        //Adding the objects
        while((fileLine = bufferedReader.readLine()) != null) {
            //Tokenize the String to extract information
            StringTokenizer st = new StringTokenizer(fileLine," ");          
            //Go through each token and put it into an arrayList
            ArrayList<String> list = new ArrayList();
            while(st.hasMoreTokens()) {
                list.add(st.nextToken());
            }
            //Grab each piece of data
            Type = Integer.parseInt(list.get(0));
            //Route the proper objects to their proper places
            switch(Type){
                case 1:
                {
                holder = new Check(Integer.parseInt(list.get(1)), Type,  Double.parseDouble(list.get(3)), Integer.parseInt(list.get(2)));
                Main.$acct.addNewTrans(holder);
                break;
                }
                case 2:
                {
                holder = new Deposit(Integer.parseInt(list.get(1)), Type, Double.parseDouble(list.get(5)), Double.parseDouble(list.get(3)),
                Double.parseDouble(list.get(4)));
                Main.$acct.addNewTrans(holder);
                break;
                }
                case 3:
                {
                holder = new Transaction(Integer.parseInt(list.get(1)), Type, Double.parseDouble(list.get(4)));
                Main.$acct.addNewTrans(holder);
                break;
                }
                default:
                {}  
            }
            //End of switch
        }
        //End of while loop

        bufferedReader.close();
    }  
    //End of Try
    //Exception handling portion
    catch(FileNotFoundException ex) {
        System.out.println(
            "Unable to open file '" +
            rFile.getName() + "'");               
    }
    catch(IOException ex) {
        System.out.println(
            "Error reading file '"
            + rFile.getName() + "'");                 
        // Or we could just do this:
        // ex.printStackTrace();
    }
}

Образец файла:

котелок

500

4

5

1 0 1 100

3 1 Srv. CHRG. 0,15

2 2 Депозит 100 100 200

1 Ответ

0 голосов
/ 15 мая 2018

Ваш код работает нормально, если формат входного файла и кодировка являются стандартными. Убедитесь, что во входном файле нет лишних разрывов строк (или лишних разрывов строк в конце файла); Я проверил ваш код с помощью файла в кодировке ANSI, и он работал как положено.

Исправьте обработку исключений для обработки общих случаев - это поможет вам отладить ошибку.

т.е. сделайте что-то подобное в конце метода:

} catch(Exception e) {
    // Throw the exception here, or print it to the console...
    e.printStackTrace();
}

Гудлак!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...