При использовании FileReader отображается только последняя строка текстового файла? - PullRequest
0 голосов
/ 10 апреля 2011

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

public TextArea() {
    initComponents();


    try {
        FileReader one = new FileReader ("info.txt");
        BufferedReader buf = new BufferedReader(one);

        String line = "";
        StringTokenizer st = null;
        int lineNumber = 0, tokenNumber = 0;
        //textArea.setText(line);

        while ((line = buf.readLine()) != null) {
            lineNumber++;

            //break comma separated line using ","
            st = new StringTokenizer(line, ",");

            while (st.hasMoreTokens()) {
                //display csv values
                tokenNumber++;
                line = ("Title: " + st.nextToken()
                        + "\n" + "Make:" + st.nextToken()
                        + "\n" + "Model:" + st.nextToken()
                        + "\n" + "Year:" + st.nextToken()
                        + "\n" + "Price:" + st.nextToken()
                        + "\n" + "Notes:" + st.nextToken()
                        + "\n" + "Details:" + st.nextToken()
                        + "\n");

                textArea.setText(line);
            }

            //reset token number
            tokenNumber = 0;
            //textArea.setText(line);
        }

    } catch (FileNotFoundException e) {
        JOptionPane.showMessageDialog(this, "File not found");
    } catch (IOException e){
        JOptionPane.showMessageDialog(this, "Data not read");
    }

Ответы [ 3 ]

1 голос
/ 10 апреля 2011

Посмотрите на ваш код:

while (st.hasMoreTokens()) {
            //display csv values
            tokenNumber++;
            line = ("Title: " + st.nextToken()
                    + "\n" + "Make:" + st.nextToken()
                    + "\n" + "Model:" + st.nextToken()
                    + "\n" + "Year:" + st.nextToken()
                    + "\n" + "Price:" + st.nextToken()
                    + "\n" + "Notes:" + st.nextToken()
                    + "\n" + "Details:" + st.nextToken()
                    + "\n");

            textArea.setText(line);
        }

Каждый раз, когда вы находите новый токен, вы устанавливаете для textarea val последний найденный токен. Поэтому, очевидно, текстовая область будет отображать только последнюю строку. Вы можете попробовать что-то вроде:

textArea.setText(textArea.getText() + line);
0 голосов
/ 10 апреля 2011
while (st.hasMoreTokens()) {
            //display csv values
            tokenNumber++;
            line = line +"\n"+("Title: " + st.nextToken()
                    + "\n" + "Make:" + st.nextToken()
                    + "\n" + "Model:" + st.nextToken()
                    + "\n" + "Year:" + st.nextToken()
                    + "\n" + "Price:" + st.nextToken()
                    + "\n" + "Notes:" + st.nextToken()
                    + "\n" + "Details:" + st.nextToken()
                    + "\n");


        }
 textArea.setText(line);
0 голосов
/ 10 апреля 2011

Я думаю, что вы переопределяете строковую переменную.

line+=...

Объединить, а затем установить значение всей объединенной строки вне цикла.

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