Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908

Чтение из текстового файла строковых данных в двумерный массив java8

23.05.2017, 15:04. Показов 2448. Ответов 18

Студворк — интернет-сервис помощи студентам
Собственно как это сделать?
Scanner использовать или reader или что?
Использовать List<List<Double>> matr = new LinkedList<>(); для подсчёта строк в файле?
Сильно не пинайте, но только начинаю изучать.
Выручайте, ребята.
Как вариант считать в одномерный, а потом переделать в двумерный массив с использованием регулярки.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.05.2017, 15:04
Ответы с готовыми решениями:

Чтение данных из текстового файла в массив C#
Здравствуйте, ребят помогите мне если не сложно.. В общем дан файл с координатами, их нужно ввести в массив, далее построить с этих...

Чтение данных из текстового файла в массив
Описать структуру с именем Student, содержащую следующие поля: • Фамилия, имя, отчество; • Форма обучения (очная, заочная,...

Прочитать из текстового файла двумерный массив данных
Уважаемые господа! Стоит следующая производственная задача: прочитать из текстового файла двумерный массив данных (11*11), точнее...

18
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
23.05.2017, 15:25
че сделать то надо? зачем двумерный массив?
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
23.05.2017, 15:29  [ТС]
xoraxax, работать дальше с ним, перебирать, в файл выводить и тд и тп.
А пока надо файл прочитать в двумерный массив. В файле дерево каталогов в первом столбце, во втором столбце их вес, в третьем разрешения. Все разделено пробелами.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
23.05.2017, 17:42
Files.lines.map(line->line.split("\\W+"))
ну и дальше в таком же духе можешь на класс какой-нибудь замапить, например. Примеров на форуме довольно много.
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
24.05.2017, 20:41  [ТС]
xoraxax, ну а с использованием регулярки? Типа такой на
Visual Basic
1
objRegExp.Pattern = "^(.+) (\d+) (\d+) (\d+)(?:| (.+))$"
Только на java? Чтоб получилось 5 столбцов

Добавлено через 17 часов 6 минут
xoraxax, а сразу с регуляркой можно прочитать и разбить на столбцы?

Добавлено через 6 часов 52 минуты
вроде что то заработало
Java
1
2
3
4
5
6
7
8
9
                try {
                    Path path = Paths.get(pathStatfile);
                    String[][] array = Files.lines(path)
                            .map(s -> s.split("^(.*) (\\d+) (\\d+) (\\d+)(?:| (.*))$"))
//                            .map(s -> s.split(" "))
                            .toArray(String[][]::new);
                    System.out.println(Arrays.toString(array));
                } catch (IOException e1) {
                }
но почему то все значения пустые
Что то в регулярке не то. Что именно?
0
24.05.2017, 21:36

Не по теме:

При использовании Files.lines нужно не забывать закрывать поток

0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
24.05.2017, 23:12  [ТС]
пример входящих строк такой
Code
1
2
3
4
5
6
7
8
9
10
11
12
system/lost+found 0 0 770
system/app 0 0 755
system/app/AnalyticsCore 0 0 755
system/app/AnalyticsCore/AnalyticsCore.apk 0 0 644
system/app/AnalyticsCore/oat 0 0 755
system/app/AnalyticsCore/oat/arm64 0 0 755
system/app/AnalyticsCore/oat/arm64/AnalyticsCore.odex 0 0 644
system/app/AntHalService 0 0 755
system/app/AntHalService/AntHalService.apk 0 0 644
system/app/AntHalService/oat 0 0 755
system/app/AntHalService/oat/arm64 0 0 755
system/app/AntHalService/oat/arm64/AntHalService.odex 0 0 644
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
24.05.2017, 23:36
Java
1
2
3
Files.lines(Paths.get(PATH))
                .map(line -> line.split("\\s+"))
                .collect(toMap(split -> split[0], split -> Arrays.stream(split).skip(1).map(Integer::parseInt).collect(toList())));
проверок всяких нет, потому что лень, стрим тоже лень закрывать.
1
 Аватар для we2seek
84 / 84 / 42
Регистрация: 25.01.2010
Сообщений: 386
25.05.2017, 00:10
xoraxax, немного эффективнее вот так:
Java
1
2
3
4
5
6
try (Stream<String> stream = Files.lines(Paths.get(PATH))) {
    stream
        .map(line -> line.split("\\s+"))
        .collect(toMap(split -> split[0], split -> Arrays.stream(split).skip(1).map(Integer::parseInt).collect(toList())));
 
}
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
25.05.2017, 05:25  [ТС]
we2seek, xoraxax, а если пробел в имени файла? То все, приплыли? Нет, ребят, сплит по пробелам тут не катит. Регулярка нужна.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
25.05.2017, 08:39
Цитата Сообщение от blackeangel Посмотреть сообщение
если пробел в имени файла
если ты знаешь, что у тебя три числа - доставай их из трех последних элементов сплита, то что останется, отдашь в String.join
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
25.05.2017, 14:41  [ТС]
xoraxax, хорошо, а при таких строках это уже не покатит
Code
1
2
system/app/PicoTts/lib/arm/libttscompat.so 0 0 644 /system/lib/libttscompat.so
system/app/PicoTts/lib/arm/libttspico.so 0 0 644 /system/lib/libttspico.so
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
25.05.2017, 15:15
Цитата Сообщение от blackeangel Посмотреть сообщение
xoraxax, хорошо, а при таких строках это уже не покатит
ну печаль беда теперь.
Определись сначала, что именно ты парсить хочешь, потом думать будешь, как это делать.
А что если имя файла будет path/qwe 1 2 3 asd.txt, как ты тогда поймешь, где оно заканчивается?
Если ты сам файл формируешь, используй вместо пробела другой разделитель.
Если не сам, а кто-то другой, посмотри в каком формате он генерирует файлы.
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
25.05.2017, 15:40  [ТС]
xoraxax,
Такую строку схавал как надо
system/app/AguiAcc AndAlsps Calibration/lib/arm 6 4/libgse nsorca li_jni .so 0 0 777
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
25.05.2017, 15:41
Цитата Сообщение от blackeangel Посмотреть сообщение
Такую строку схавал как надо
я рад за тебя, в чем вопрос то тогда?
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
25.05.2017, 15:50  [ТС]
xoraxax, вопрос то в 12 посте.

Добавлено через 5 минут
Хотя правильнее будет сформулировать задачу так:
Необходимо прочитать текстовый файл в двумерный массив. В массиве должно быть 6 столбцов. 6й столбец пустой.
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
25.05.2017, 15:51  [ТС]
И приложить файл
Вложения
Тип файла: zip stat.zip (42.8 Кб, 5 просмотров)
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
25.05.2017, 15:55  [ТС]
Так будет вернее.
В массиве:
Столбец0: путь к файлу и имя файла
Столбец1-столбец3: права
Столбец4: пустой и заполненный в зависимости от наличия заполнителя
Столбец4:пустой

Добавлено через 10 секунд
Так будет вернее.
В массиве:
Столбец0: путь к файлу и имя файла
Столбец1-столбец3: права
Столбец4: пустой и заполненный в зависимости от наличия заполнителя
Столбец4:пустой
0
164 / 170 / 139
Регистрация: 28.11.2016
Сообщений: 301
25.05.2017, 17:38
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
 
public class FolderRegex {
    static class Entry {
        private String path;
        private int val1;
        private int val2;
        private int val3;
 
        public Entry(String path, int val1, int val2, int val3) {
            this.path = path;
            this.val1 = val1;
            this.val2 = val2;
            this.val3 = val3;
        }
 
        public Entry(String s) {
            String[] strings = s.trim().split(" +");
            if (strings.length < 4) {
                throw new RuntimeException("Wrong input String");
            }
            this.path = strings[0];
            this.val1 = Integer.valueOf(strings[1]);
            this.val2 = Integer.valueOf(strings[2]);            
            this.val3 = Integer.valueOf(strings[3]);
            
        }
 
        public String getName() {
            return path;
        }
 
        public int getVal1() {
            return val1;
        }
 
        public int getVal2() {
            return val2;
        }
 
        public int getVal3() {
            return val3;
        }
 
        @Override
        public String toString() {
            return path + "  " + val1 + " " + val2 + " " + val3;
        }
    }
 
 
    public static void main(String[] args) {
        String s;
        String regex = "([\\w*/\\.\\+]+ +\\d* +\\d* +\\d*)+";
 
        List<Entry> list = new ArrayList<>();
 
        try {
            Scanner in = new Scanner(new BufferedReader(new FileReader("C:\\temp\\stat.txt")));
// parser
            while (in.hasNext()) {
                s = in.nextLine();
                Matcher m = Pattern.compile(regex).matcher(s);
                while (m.find()) {
                    Entry entry = new Entry(m.group());
                    list.add(entry);
                }
            }
            int count = 0;
            System.out.println("Found: " + list.size() + " entries");
            for (Entry entry : list) {
                System.out.println("Entry " + count++ + " :" + entry);
            }
 
            in.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
 
    }
}

Вот парсер, вытаскивает все записи из файла приведенного выше.
Создает список, с классом Entry в котором все данные распределены по полям.
Из списка массив надеюсь сами легко сделаете, у Entry есть все методы для этого.
Проверяйте.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.05.2017, 17:38
Помогаю со студенческими работами здесь

Ввод данных в двумерный массив из текстового файла
Есть двумерный маcсив из целых чисел: В каждой строке по 4 числа. Число строк не более 50-ти. Числа записаны в текстовый файл,...

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

Чтение данных из файла в двумерный массив
Добрый день! Помогите решить задачку... Есть файл, в котором содержатся значения вида 1 10 22 15 13 12 4 17 5 9

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

Чтение из файла числовых данных среди строковых.
Здравствуйте! Есть файл, который мне надо пропарсить. он примерно такого вида: v 0.123 -0.12 1.00 v 0.421 -0.1 0.4311 v 0.13...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru