нужна помощь в чтении файла и отображении содержимого на jpanel с помощью setText () - PullRequest
0 голосов
/ 10 июля 2020

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

    FileReader reader;
    ArrayList<String> file = new ArrayList<String>();
    Scanner scan = null;
    try 
    {
        reader = new FileReader(filename);
        scan = new Scanner(reader);
        
        
        while(scan.hasNext())
        {
            file.add(scan.nextLine());
        }

        return file;
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
    finally {
        scan.close();
    }

    return null;

Вот как я пишу файл

public String writeFile(ArrayList<String> data)
{
    String writer = "";
    for (String line : data)
    {
        writer += (line + lineSeparator);
    }
    return writer;
    }

Вот как я пытаюсь его отобразить

FileIO file = new FileIO();
    String filePath="squeeze.txt";
    ArrayList<String> data = file.readFile(filePath);
    jTextField1.setText(file.writeFile(data));

И я получаю ошибку на

scan.close();

Ответы [ 2 ]

0 голосов
/ 10 июля 2020
jTextField1.setText(file.writeFile(data));

A JTextField - для отдельных строк текста. Для нескольких строк используйте JTextArea.

Что касается рассматриваемой проблемы, самым простым решением является использование методов, доступных для любого JTextComponent (который включает оба вышеперечисленных).

А именно JTextComponent.read(Reader,Object) & JTextComponent.write(Writer).

0 голосов
/ 10 июля 2020

Ваша проблема здесь в том, что scan не был инициализирован до блока try. Все, что находится в блоке try, может вызвать исключение, поэтому вы должны писать свой код, предполагая, что весь код в блоке try никогда не будет запущен. К счастью, в Java есть синтаксис, специально предназначенный для этой ситуации, который называется try-with-resources. Try-with-resources обрабатывает ваши ресурсы за вас и автоматически закрывает их в конце блока try. Вот ваш код, измененный для использования try-with-resources:

try (FileReader reader = new FileReader(filename);
        Scanner scan = new Scanner(reader)) {
    while(scan.hasNext()) {
        file.add(scan.nextLine());
    }

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

return null;

Я также заметил, что в вашем блоке catch вы просто печатаете трассировку стека. Это совершенно нормально с точки зрения синтаксиса, и компилятор примет это, но я бы не рекомендовал проглатывать подобные ошибки. Если вы не хотите делать ничего особенного, лучшая универсальная линия, которую вы можете использовать, - throw new RuntimeException();. Это просто вызывает общее исключение времени выполнения c, которое распечатывает трассировку стека, а затем завершает программу. Это также имеет дополнительное преимущество, заключающееся в том, что вам не нужна строка return null; внизу, поскольку исключение времени выполнения все равно выйдет из программы, а затем любой метод, вызывающий этот метод, может безопасно предположить, что этот метод возвращает ненулевое значение. значение.

...