Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
 Аватар для Гендальф Белый
0 / 0 / 0
Регистрация: 15.09.2016
Сообщений: 57

Передача пути к файлу и запуск класса

21.06.2017, 10:06. Показов 3007. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Помогите разобраться
Есть два класса один отвечает за открытие диалогового окна и выбора файла, а второй класс прасит файл (в данный момент прописан жестко путь и имя файла).
Вопросы:
1. Как мне передать путь и имя файла, который выбирает пользователь (1 класс ) во строку 21 (2 класс) ?
2. как запустить класс который начнет парсить файл?

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
//Данный класс открывает форму для выбора файла
package controller;
 
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import javafx.stage.Window;
import java.io.*;
 
public class download_form {
    @FXML
    private Button btnExit;
   @FXML
    private Window stage;
 
   @FXML
    private Window primaryStage;
 
    @FXML
    public void handleButtonAction() { //Открываем диалоговое окно для выбора файла
 
        FileChooser fileChooser = new FileChooser();
        FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("Файлы XML (*.xml)","*.xml");
        fileChooser.setTitle("Открыть файл для загрузки");
        fileChooser.getExtensionFilters().add(extFilter);
        @SuppressWarnings("deprecation") File file = fileChooser.showOpenDialog(primaryStage);
        if (file != null){
            System.out.println(file);
        } else {
            System.out.println("Файл не выбран");
        }
    }
    @FXML
    void Close() {
        ((Stage)this.btnExit.getScene().getWindow()).close(); //Закрываем программу по кнопке Выход
    }
 
    }
Этот класс парит файл
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
package controller;
 
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
 
/**
 * Created by o.veschenikin on 20.06.2017.
 */
 
public class XMLParser  {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder documentBuilder = factory.newDocumentBuilder();
 
 
 
    public XMLParser() throws IOException, SAXException, ParserConfigurationException {
        Document document = documentBuilder.parse("G:/40.xml");
        String Familiya; //Фамилия
        String Name;     //Имя
        String Otch;     //Отчество
        String BerthDay; //Дата рожд.
        String CodVidDoc;//Код вида документа
        String Seria;    //Серия док
        String Number;   //Номер док
 
        NodeList nodeList = document.getElementsByTagName("ПерсИнфо"); //Задаем родительский елемент
        for (int i= 0; i < nodeList.getLength(); i++){
            Element element = (Element) nodeList.item(i);
 
            //Обрабатываем тег ФИОД
            Node item = element.getElementsByTagName("ФИОД").item(0);
            NamedNodeMap FIOD = item.getAttributes();
 
            Familiya = FIOD.getNamedItem("Фамилия").getNodeValue();
            Name = FIOD.getNamedItem("Имя").getNodeValue();
            Otch = FIOD.getNamedItem("Отчество").getNodeValue();
            BerthDay = FIOD.getNamedItem("ДатаРожд").getNodeValue();
 
 
            //Обрабатываем тег Документ
            Node docum = element.getElementsByTagName("Документ").item(0);
            NamedNodeMap doc = docum.getAttributes();
            CodVidDoc = doc.getNamedItem("КодВидДок").getNodeValue();
            Seria = doc.getNamedItem("Серия").getNodeValue();
            Number = doc.getNamedItem("Номер").getNodeValue();
 
            System.out.println(Familiya + " " + Name + " " + Otch + " " + BerthDay
                    + " " + CodVidDoc + " "+ Seria + " " + Number);
 
 
        }
    }
 
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.06.2017, 10:06
Ответы с готовыми решениями:

Запуск программы на Java при двойном щелчке по файлу, для Windows
Надо создать возможность доступа к программе написаной на Java. Тоесть делаем двойной щелчёк по файлу который ссылаеться на программу Java...

Получение пути к файлу и его запуск
Здравствуйте, возникла такая проблема... Есть программа, для подключению к игровому серверу + она мониторит его, задача в том что для...

Передача в переменную пути к файлу
по нажатию кнопки на форме подпрограмма производит импорт данных из внешнего текстового файла в таблицу. причем текстовый файл может...

3
 Аватар для dalay_lama
82 / 82 / 50
Регистрация: 22.09.2012
Сообщений: 495
21.06.2017, 10:44
Лучший ответ Сообщение было отмечено Гендальф Белый как решение

Решение

Сначала подправить немного код парсера
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
package controller;
 
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
 
/**
 * Created by o.veschenikin on 20.06.2017.
 */
 
public class XMLParser  {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder documentBuilder = factory.newDocumentBuilder();
 
    public XMLParser() {} 
 
    public void parse(String path) throws IOException, SAXException, ParserConfigurationException {
        Document document = documentBuilder.parse(path);
        String Familiya; //Фамилия
        String Name;     //Имя
        String Otch;     //Отчество
        String BerthDay; //Дата рожд.
        String CodVidDoc;//Код вида документа
        String Seria;    //Серия док
        String Number;   //Номер док
 
        NodeList nodeList = document.getElementsByTagName("ПерсИнфо"); //Задаем родительский елемент
        for (int i= 0; i < nodeList.getLength(); i++){
            Element element = (Element) nodeList.item(i);
 
            //Обрабатываем тег ФИОД
            Node item = element.getElementsByTagName("ФИОД").item(0);
            NamedNodeMap FIOD = item.getAttributes();
 
            Familiya = FIOD.getNamedItem("Фамилия").getNodeValue();
            Name = FIOD.getNamedItem("Имя").getNodeValue();
            Otch = FIOD.getNamedItem("Отчество").getNodeValue();
            BerthDay = FIOD.getNamedItem("ДатаРожд").getNodeValue();
 
 
            //Обрабатываем тег Документ
            Node docum = element.getElementsByTagName("Документ").item(0);
            NamedNodeMap doc = docum.getAttributes();
            CodVidDoc = doc.getNamedItem("КодВидДок").getNodeValue();
            Seria = doc.getNamedItem("Серия").getNodeValue();
            Number = doc.getNamedItem("Номер").getNodeValue();
 
            System.out.println(Familiya + " " + Name + " " + Otch + " " + BerthDay
                    + " " + CodVidDoc + " "+ Seria + " " + Number);
 
 
        }
    }
 
}
Затем в контроллере создать этот класс парсера и передать ему путь
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@FXML
    public void handleButtonAction() { //Открываем диалоговое окно для выбора файла
 
        FileChooser fileChooser = new FileChooser();
        FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("Файлы XML (*.xml)","*.xml");
        fileChooser.setTitle("Открыть файл для загрузки");
        fileChooser.getExtensionFilters().add(extFilter);
        @SuppressWarnings("deprecation") File file = fileChooser.showOpenDialog(primaryStage);
        if (file != null){
            System.out.println(file);
            XMLParser xmlParser = new XmlParser();
            xmlParser.parse(file.getPath());
        } else {
            System.out.println("Файл не выбран");
        }
    }
1
 Аватар для Гендальф Белый
0 / 0 / 0
Регистрация: 15.09.2016
Сообщений: 57
21.06.2017, 17:46  [ТС]
Спасибо
Очень помог

Добавлено через 3 часа 50 минут
Еще вопросик
А как повесить проверку на parser, чтоб выдавало предупреждение что данный файл уже был загружен?
0
 Аватар для dalay_lama
82 / 82 / 50
Регистрация: 22.09.2012
Сообщений: 495
22.06.2017, 03:31
Цитата Сообщение от Гендальф Белый Посмотреть сообщение
А как повесить проверку на parser, чтоб выдавало предупреждение что данный файл уже был загружен?
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
package controller;
 
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
 
/**
 * Created by o.veschenikin on 20.06.2017.
 */
 
public class XMLParser  {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder documentBuilder = factory.newDocumentBuilder();
 
    private String lastPath;//последний файл, который парсили
 
    public XMLParser() {} 
 
    public void parse(String path) throws IOException, SAXException, ParserConfigurationException {
        if (lastPath != null && lastPath == path) {//проверяем совпадает ли последний файл и тот который передали
            System.out.println(String.format("Файл %s, уже был загружен", path));
            return;
        }
        
        Document document = documentBuilder.parse(path);
        String Familiya; //Фамилия
        String Name;     //Имя
        String Otch;     //Отчество
        String BerthDay; //Дата рожд.
        String CodVidDoc;//Код вида документа
        String Seria;    //Серия док
        String Number;   //Номер док
 
        NodeList nodeList = document.getElementsByTagName("ПерсИнфо"); //Задаем родительский елемент
        for (int i= 0; i < nodeList.getLength(); i++){
            Element element = (Element) nodeList.item(i);
 
            //Обрабатываем тег ФИОД
            Node item = element.getElementsByTagName("ФИОД").item(0);
            NamedNodeMap FIOD = item.getAttributes();
 
            Familiya = FIOD.getNamedItem("Фамилия").getNodeValue();
            Name = FIOD.getNamedItem("Имя").getNodeValue();
            Otch = FIOD.getNamedItem("Отчество").getNodeValue();
            BerthDay = FIOD.getNamedItem("ДатаРожд").getNodeValue();
 
 
            //Обрабатываем тег Документ
            Node docum = element.getElementsByTagName("Документ").item(0);
            NamedNodeMap doc = docum.getAttributes();
            CodVidDoc = doc.getNamedItem("КодВидДок").getNodeValue();
            Seria = doc.getNamedItem("Серия").getNodeValue();
            Number = doc.getNamedItem("Номер").getNodeValue();
 
            System.out.println(Familiya + " " + Name + " " + Otch + " " + BerthDay
                    + " " + CodVidDoc + " "+ Seria + " " + Number);
 
 
        }
        
        lastPath = path;//запоминаем текущий файл который распарсили
    }
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.06.2017, 03:31
Помогаю со студенческими работами здесь

Передача пути к файлу через -d в программу
День добрый. У меня есть программа на с++ в котрой я открываю файл по заранее в коде прописанному пути, но мне нужно что бы эту программу...

Передача пути к файлу в качестве параметра через консоль
Доброго времени суток. Как в самой программе передать в качестве параметра путь к файлу? Понятное дело, что в консоли: путь до файла и...

Скрипт копирования пути к файлу\папке и вставка пути в письмо Outlook
Всем доброго времени суток! Помогите, пож-та, разобраться\дописать скрипт. Есть скрипт на открытие\создание нового сообщения в Outlook....

Пути к текстовому файлу
Новичек, пытаюсь просто открыть файл: text_file = open(&quot;t.txt&quot;, &quot;r&quot;) Но он пишет что t.txt не существует, хоть он там есть, рядом с самим...

Кириллица в пути к файлу
Кириллица в пути к файлу в строке не понятные символы. помогите решить проблему. Добавлено через 21 минуту UPD: проблему решил


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru