Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 15.10.2018
Сообщений: 45

Почему функция не считывает содержания файла?

01.10.2019, 15:39. Показов 1579. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Почему функция не считывает содержания файла?

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
public static void read(String pav,
            ArrayList<Atkarpa> as) {
        Scanner s = null;
        String first = null;
        try {
            s = new Scanner(new File(pav));
            String start = null;
            while (s.hasNext()) {
                first = s.nextLine();
                if (first.trim().endsWith(" ")) {
                    start = first;
                } else {
                    String[] duom = first.split(" ");
                    int start_km = Integer.parseInt(duom[0].trim());
                    String end = duom[1];
                    int end_km = Integer.parseInt(duom[2].trim());
                    Atkarpa atk = new Atkarpa(start, start_km, end, end_km);
                    as.add(atk);
                }
            }
        } catch (Exception error) {
            System.out.println("Error");
            klaida.printStackTrace();
        } finally {
            if (s != null) {
                s.close();
            }
        }
    }

Файл data.txt :

Panevezis 10 Vilnis 129
Vilnis 135 New Vilnis 145
New Vilnis 145 Mickunai 150
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.10.2019, 15:39
Ответы с готовыми решениями:

Функция getc (FILE*) при первом вызве считывает НЕ ПЕРВЫЙ символ файла.Почему?
Друзья! Здравствуйте! Вот код. #include &lt;iostream&gt; using namespace std; int main () { FILE* zapis_v_fail; FILE*...

Почему функция scanf() считывает несколько целых чисел только с int?
Привет всем, я абсолютный новичок в программировании и мне не понятно, почему функция scanf() при вводе двух целых чисел, не считывает либо...

Почему не правильно считывает символы из файла?
FILE *fn; fopen_s(&amp;fn, &quot;code.txt&quot;, &quot;r&quot;); char s = ' '; char *message = new char; int c = 0; while ((s = fgetc(f)!=EOF)) { ...

6
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
01.10.2019, 15:48
Цитата Сообщение от SonyHD Посмотреть сообщение
Почему функция не считывает содержания файла?
потому что неправильно написана. Запускал вообще код то?
Цитата Сообщение от SonyHD Посмотреть сообщение
klaida.printStackTrace();
это что за дичь?
Цитата Сообщение от SonyHD Посмотреть сообщение
int start_km = Integer.parseInt(duom[0].trim());
в первом поле у тебя строка - нахрен ты ее в инт парсишь?
0
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
01.10.2019, 15:49
А ты уверен, что не считывает? Есть вариант пройтись дебаггером, но ты вряд ли это сделаешь, поэтому вставь эту строку после first = s.nextLine();
Java
1
System.out.println(first);
и запусти программу. Если будет что-то выводиться, значит что-то не так с остальной частью метода, а если нет — с файлом
0
 Аватар для vvm28
771 / 539 / 67
Регистрация: 22.12.2013
Сообщений: 2,498
Записей в блоге: 26
01.10.2019, 20:01
SonyHD, что вы пытаетесь сделать вашим кодом?
Что он должен делать, ваш код?

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
/*
  
 */
package readFile;
 
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Arrays;
 
import java.util.Scanner;
 
 
class Atkarpa {
 
    Atkarpa(String start, int start_km, String end, int end_km) {
    }
}
 
public class ReadFile {
 
    public static void main(String[] args) {
        String str = "test.txt";
        ArrayList<Atkarpa> arrayList = new ArrayList<>();
 
        try {
            read(str, arrayList);
        } catch (FileNotFoundException ex) {
            //Logger.getLogger(ReadFile.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
 
    public static void read(String pav,
            ArrayList<Atkarpa> as) throws FileNotFoundException {
        Scanner scan = null;
        String first = null; //присвоенное значение не используется 
        try {
            scan = new Scanner(new File(pav));
            String start = null;
            while (scan.hasNext()) {
                first = scan.nextLine();
                if (first.trim().endsWith(" ")) {
                    start = first;
                } else {
                    String[] duom = first.split(" ");
                    //  int start_km = Integer.parseInt(duom[0].trim());
                    //  String end = duom[1];
                    //  int end_km = Integer.parseInt(duom[2].trim());
                    // Atkarpa atk = new Atkarpa(start, start_km, end, end_km);
                    //as.add(atk);
                    System.out.println("duom " + Arrays.asList(duom));
                }
            }
        } /*catch (Exception error) {
            System.out.println("Error");
            //  klaida.printStackTrace();
        } */ finally {
            if (scan != null) {
                scan.close();
            }
        }
    }
}
Вот пожалуйста считывает и выводит :
run:
duom [122]
duom [3222]
duom [cnhjrf]
BUILD SUCCESSFUL (total time: 0 seconds)
Текстовый файл "test.txt"
с содержанием:
122
3222
cnhjrf



Только не используйте этот код.
Код ужасен своей бессмысленностью, от наименования переменных до использования finally.
0
 Аватар для Aviz__
2748 / 2056 / 508
Регистрация: 17.02.2014
Сообщений: 9,483
01.10.2019, 20:07
господа, есть предположение, что SonyHD, просто троллит...
0
0 / 0 / 0
Регистрация: 15.10.2018
Сообщений: 45
01.10.2019, 23:12  [ТС]
По вашим советам, кое что поправил. Теперь считывает, но не получается двух слов в один String поместить..

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
    public static void readFile(String pav,
            ArrayList<Atkarpa> as) {
        Scanner s = null;
        String pirmaEilute = null;
        try {
            s = new Scanner(new File(pav));
            String start = null;
            while (s.hasNext()) {
                pirmaEilute = s.nextLine();
                //System.out.println(pirmaEilute);
                if (pirmaEilute.trim().endsWith(" ")) {
                    start = pirmaEilute;
                } else {
                    String[] duom = pirmaEilute.split(" ");
                    String pradzia = duom[0];
                    int pradzia_km = Integer.parseInt(duom[1].trim());
                    String pabaiga = duom[2];
                    int pabaiga_km = Integer.parseInt(duom[3].trim());
                    Atkarpa atk = new Atkarpa(pradzia, pradzia_km, pabaiga, pabaiga_km);
                    as.add(atk);
                }
            }
        } catch (Exception klaida) {
            System.out.println("Klaida");
            klaida.printStackTrace();
        } finally {
            if (s != null) {
                s.close();
            }
        }
    }
Vilnius 135 NaujojiVilnia 145 (Работает)
Vilnius 135 Naujoji_Vilnia 145 (Работает)
Vilnius 135 Naujoji Vilnia 145 (Не работает)
0
 Аватар для alicesmagic
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875
02.10.2019, 06:59
Лучший ответ Сообщение было отмечено SonyHD как решение

Решение

SonyHD, вот так все работает. Даже если названия как первого так и второго города состоят из любого количества слов:

Кликните здесь для просмотра всего текста
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
public static void readFile(String pav, ArrayList<Atkarpa> as) {
    try (Scanner s = new Scanner(new File(pav))) {
        while (s.hasNext()) {
            String pirmaEilute = s.nextLine().trim();
            Scanner s2 = new Scanner(pirmaEilute);
            String pradzia = "", pabaiga = "";
            int pradzia_km = -1, pabaiga_km = -1;
            while (s2.hasNext()) {
                if (s2.hasNextInt()) {
                    if (pradzia_km >= 0) {
                        pabaiga_km = s2.nextInt();
                    } else {
                        pradzia_km = s2.nextInt();
                    }
                } else {
                    if (pradzia_km < 0) {
                        pradzia = pradzia.isEmpty()
                                ? pradzia + s2.next()
                                : pradzia + " " + s2.next();
                    } else {
                        pabaiga = pabaiga.isEmpty()
                                ? pabaiga + s2.next()
                                : pabaiga + " " + s2.next();
                    }
                }
            }
            Atkarpa atk = new Atkarpa(pradzia, pradzia_km,
                    pabaiga, pabaiga_km);
            as.add(atk);
        }
    } catch (Exception klaida) {
        System.out.println("Klaida");
        klaida.printStackTrace();
    }
}


New Vilnius 135 Naujoji Vilnia 145 (Работает)
Vilnius 135 Naujoji Vilnia 145 (Работает)
Vilnius Super 135 Naujoji Vilnia Old 145 (Работает)

С помощью регулярных выражений тоже самое:

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static void readFile(String pav, ArrayList<Atkarpa> as) {
    try (Scanner s = new Scanner(new File(pav))) {
        while (s.hasNext()) {
            String pirmaEilute = s.nextLine().trim();
            int[] arr = new int[4];
            Pattern p = Pattern.compile("\\d+");
            Matcher m = p.matcher(pirmaEilute);
            for (int i = 0; m.find(); i += 2) {
                arr[0 + i] = m.start();
                arr[1 + i] = m.end();
            }
            String pradzia = pirmaEilute.substring(0, arr[0] - 1);
            String pabaiga = pirmaEilute.substring(arr[1] + 1, arr[2] - 1);
            int pradzia_km = Integer.parseInt(pirmaEilute.substring(arr[0], arr[1]));
            int pabaiga_km = Integer.parseInt(pirmaEilute.substring(arr[2]));
            Atkarpa atk = new Atkarpa(pradzia, pradzia_km, pabaiga, pabaiga_km);
            as.add(atk);
        }
    } catch (Exception klaida) {
        System.out.println("Klaida");
        klaida.printStackTrace();
    }
}
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.10.2019, 06:59
Помогаю со студенческими работами здесь

Не могу понять почему не считывает текст из файла
Не могу понять почему ошибка!!! procedure TForm1.Button10Click(Sender: TObject); begin ...

Почему программа не считывает данные с xml-файла
создала через блокнот xml-файл: &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt; &lt;Configuration&gt; &lt;Baud_rate&gt; 7 &lt;/Baud_rate&gt; ...

Функция,которая считывает из файла только n последних строк
Привет! Подскажите как прописать функцию, перед этим уже прописала потоковое чтение из файла и посчитала количество строк в файле. Спасибо!

Функция getline считывает несколько строк из файла, игнорируя символ новой строки
Всем доброго дня! В С++ я новичок, сам себе придумываю задачки, просто для тренировки. Столкнулся с непонятным для меня поведением...

Написать программу которая считывает считывает текст из файла и записывает в другой слова состоящие не менее чем из 7 букв
Написать программу которая считывает считывает текст из файла и записывает в другой слова состоящие не менее чем из 7 букв Мне кажется...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru