Что может заставить программу не читать весь файл? - PullRequest
0 голосов
/ 05 марта 2012

У меня есть программа, которая должна читать из файла. Она читает некоторое количество данных, но не все. Когда я пытаюсь прочитать тот же файл в том же месте, с другой программой, выполненной таким же образом с теми же классами, которые он читаетвесь файл.Вот код, используемый в обеих программах:

                if (i >= 1) {
                try {

                file = new File("Tabel " + i + " " + timeLine + ".csv");
                fw = new FileWriter(file);
                fw.write(FileChooserSave.getInstance().getStringArray()[i]);
                if (i == 1) {
                    FileInputStream fis = new FileInputStream(file);
                    InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
                    BufferedReader br = new BufferedReader(isr);
                    String line;
                    while ((line = br.readLine()) != null) {   
                        System.out.println(line);
                    }
                    fis.close();
                    isr.close();
                    br.close();

                }
            } catch (IOException ex) {
                Logger.getLogger(Frame.class.getName()).log(Level.SEVERE, null, ex);
            } finally {
                try {
                    fw.close();
                } catch (IOException ex) {
                    Logger.getLogger(Frame.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }

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

Ответы [ 2 ]

3 голосов
/ 05 марта 2012

Хм ... Ваше решение несколько усложнено, поэтому может быть много причин, вызывающих проблему.

Я бы попробовал запустить приложение в режиме отладки, а когда оно "зависает" , просто приостановить поток, например. в Eclipse, и вы увидите, где он ожидает данных.

Если вы используете Java 7, есть простая команда, которая может помочь вам прочитать все строки файла одновременно:

Path file = Paths.get(filename);
List<String> lines = Files.readAllLines(file, Charset.defaultCharset());
0 голосов
/ 05 марта 2012

Вы читаете файл, пока FileWriter все еще открыт.Это может привести к тому, что не все записи будут записаны на диск.

Попробуйте переместить вызов для закрытия перед новым FileInputStream.

...