Как создать строки из файла TXT JTable? - PullRequest
0 голосов
/ 09 апреля 2020

Мне нужно прочитать из текстового файла и отсортировать все по разным массивам или строкам, что позволяет мне устанавливать текст для моих JLabels. Один массив / строка для идентификатора, названия товара, цены и запаса.

enter image description here

Это предварительный просмотр моего текстового файла:

enter image description here

Вот мой код для чтения txt-файла и импорта его в JTable:

String filePath = "C:\\Users\\zagad\\IdeaProjects\\DATABYTES\\stock\\consoles\\consoles.txt";
                File file = new File(filePath);
                try {
                    BufferedReader br = new BufferedReader(new FileReader(file));
                    String firstLine = br.readLine().trim();
                    String[] columnsName = firstLine.split(", ");

                    DefaultTableModel model3 = (DefaultTableModel) productTable.getModel();
                    model3.setColumnIdentifiers(columnsName);

                    Object[] tableLines = br.lines().toArray();

                    for (int i = 0; i < tableLines.length; i++) {
                        String line = tableLines[i].toString().trim();
                        String[] dataRow = line.split("/");

                        model3.addRow(dataRow);
                    }
                } catch (IOException ex) {
                    ex.printStackTrace();
                }

Как их разделить? Любая помощь будет оценена.

Текстовый файл:

ID      , Item Name              ,Price     , Stock
00016   / Apple Airpods          / 8999     / 20
00017   / Samsung Galaxy Buds    / 6999     / 13
00018   / Apple Airpods Pro      / 14999    / 5
00019   / Beats Powerbeats Pro   / 13490    / 8
00020   / Sony WF-1000XM3        / 10799    / 10

1 Ответ

0 голосов
/ 09 апреля 2020

Похоже, что формат разделяет каждый из столбцов на \, поэтому вы можете разделить строку на это. Что мы можем сделать, это прочитать все строки из данного объекта Path, который является путем к файлу. Затем мы можем пропустить первую строку, которую мы знаем, это имена столбцов таблицы. Затем мы можем отобразить каждую из этих строк, которые являются отдельными объектами String, в массив String, удалив все пробелы с помощью ссылки replaceAll, а затем с помощью метода String # split разделить строку на \, что даст нам каждый из столбцов для каждый ряд. Затем мы можем собрать все эти строковые массивы в список с помощью метода Stream # collect.

         List<String> lines = Files.readAllLines(Paths.get("first.txt"));

        String[] columnNames = lines.stream().findFirst().orElseThrow(IOException::new).split(",");

        List<MyRow> rows = lines
                .stream()
                .skip(1)
                .map(line -> line.replaceAll(" ", "").split("/"))
                .map(MyRow::valueOf)
                .collect(Collectors.toList());

        DefaultTableModel model3 = new DefaultTableModel();

        model3.setColumnIdentifiers(columnNames);

        rows.forEach(row -> model3.addRow(new Object[] { row.getId(), row.getItemName(), row.getPrice(), row.getStock() }));

        List<Integer> ids = rows.stream().map(MyRow::getId).collect(Collectors.toList());

Выход:

[00016, AppleAirpods, 8999, 20]
[00017, SamsungGalaxyBuds, 6999, 13]
[00018, AppleAirpodsPro, 14999, 5]
[00019, BeatsPowerbeatsPro, 13490, 8]
[00020, SonyWF-1000XM3, 10799, 10]
...