Прочитать один файл с несколькими BufferedReaders - PullRequest
1 голос
/ 19 сентября 2011

Я работаю над программой, которой нужно обновить строку, которая зависит от ее значения от результата строки, которая читается после.Я думал, что мог бы использовать два BufferedReader в Java, чтобы расположить читателя в строке для обновления, в то время как другой идет для строки, которая фиксирует значение (это может быть неизвестное число строк впереди).Проблема здесь в том, что я использую два BufferedReader для одного и того же файла, и даже если я думаю, что я делаю правильно с индексами, результат в отладке не кажется надежным.Вот код:

            String outFinal
            FileName=fileOut;

        File fileDest=new File(outFinalFileName);
        try {
            fout = new BufferedWriter(
                    new OutputStreamWriter(
                            new FileOutputStream(fileDest)));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        FileReader inputFile=null;

        try {
            inputFile = new FileReader(inFileName);
        } catch (FileNotFoundException e2) {
            e2.printStackTrace();
        }
        BufferedReader fin = new BufferedReader(inputFile);

        BufferedReader finChecker = new BufferedReader(inputFile);  //Checks the file and matches record to change
        String line="";
        String lineC="";
        int lineNumber=0;
        String recordType="";
        String statusCode="";
        try {
            while ((lineC = finChecker.readLine()) != null) {
                lineNumber++;
                if (lineNumber==1)
                    line=fin.readLine();
                recordType=lineC.substring(0,3);//Gets current Record Type
                if (recordType.equals("35")){
                    while(!line.equals(lineC)){
                        line=fin.readLine();
                        if (line==null)
                            break;
                        fout.write(line);


                    }
                }else if (recordType.equals("32")){
                    statusCode=lineC.substring(4,7);
                    if(statusCode.equals("XX")){
                        updateRecordLine(line,fout);
                    }
                }


            }
            returnVal=true;

        } catch (IOException e) {
            e.printStackTrace();

        }

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 19 сентября 2011

Ну, BufferedReader только читает вещи, у него нет возможности записывать данные обратно.Итак, что вам нужно, это BufferedReader для загрузки содержимого и BufferedWriter, который берет все входные данные из BufferedReader и выводит их во временный файл с исправленными / добавленными данными.

Затем, когдавсе готово (т.е. потоки BufferedReader и BufferedWriter закрыты), вам нужно либо удалить исходный файл, либо переименовать временный файл в имя исходного файла.

Вы в основном копируете исходный файлво временный файл, изменив соответствующую строку в выводе временного файла, а затем скопировав / переименовав временный файл поверх оригинала.

0 голосов
/ 19 сентября 2011

хорошо, я вижу некоторую проблему в вашем коде именно в этих строках ->

recordType=lineC.substring(0,3);//Gets current Record Type                 
if (recordType.equals("35")){ 

, если вы видите в первой строке, вы получаете подстроку recordType в recordType.Теперь длина recordType равна 3. Если вообще у recordType есть только 2 символа, то подстрока создает исключение arrayIndexOutOfBoundsException.Поэтому, когда нет исключений времени выполнения, его длина равна 3, и на следующей строке вы вызываете метод equals, в котором есть строка из 2 символов.

Будет ли это, если блок когда-либо будет работать?

...