Как получить файл из моего проекта (где написан код) - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь получить файл (readme.txt) из папки моего проекта.Не знаю, как узнать местоположение проекта.Когда я говорю «проект», я имею в виду место, где написан код моего приложения, а не приложение во время выполнения.Я пытался получить абсолютный путь, относительный путь ... и он всегда дает мне папку приложения во время выполнения.Также пытался что-то вроде этого .getClass () и пытался извлечь путь или System.getProperty ("user.dir").Эти два также дают мне путь моего приложения затмения ... / ... / ... во время выполнения.Я делаю плагин eclipse, и предполагается, что этот файл является частью моего плагина, поэтому, когда пользователь нажимает кнопку, этот файл открывается (это некоторый текстовый файл справки).Это мой код для открытия файла, проблема в пути.

/**
 * Help button listener. If button is pressed, help file is opened.
 */
private void listenButtonHelp() {
    buttonHelp.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
            if (Desktop.isDesktopSupported()) {
                File helpFile = new File("\\readme.txt");
                helpFile.setReadOnly();
                Desktop desktop = Desktop.getDesktop();
                try {
                    desktop.open(helpFile);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    });
}

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Я нашел ответ, у меня это работает:

/**
 * Help button listener. If button is pressed, help file is opened.
 */
private void listenButtonHelp() {
    buttonHelp.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
            if (Desktop.isDesktopSupported()) {
                File file = null;
                Bundle bundle = Platform.getBundle("TestProject");
                IPath path = new Path("resources/readme.txt");
                URL url = FileLocator.find(bundle, path, null);
                /*
                 * After FileLocator, I get also this, like I commented before:
                 * D:\\eclipse-rcp-oxygen\\eclipse\\..\\..\\..\\eclipse_oxygen_workspace\\
                 * TestProject\\resources\\readme.txt and before it didn't work but if 
                 * you add these lines:
                 * url = FileLocator.toFileURL(url);
                 * file = URIUtil.toFile(URIUtil.toURI(url));

                 * Like in my try bracket, it works. I guess it needs to be 
                 * converted using URIUtil.
                 * Now it finds file, and it can be opened, also works for .html files.
                */
                Desktop desktop = Desktop.getDesktop();
                try {
                    url = FileLocator.toFileURL(url);
                    file = URIUtil.toFile(URIUtil.toURI(url));
                    // file.setReadOnly();
                    desktop.open(file);
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
            }
        }
    });
}
0 голосов
/ 28 мая 2018

Это зависит от того, где именно файл находится в вашем проекте.Чистая точка для его размещения может быть $ {project.root} / resources, поэтому создайте папку и поместите туда файл.Отметьте его как «исходную папку» в Eclipse (свойства проекта -> путь сборки -> исходные папки).Ваша текущая настройка не очень хорошая идея, потому что файл не будет включен в ваш дистрибутив компиляцией Eclipse.

Теперь, когда вы компилируете код, он копируется в целевые директоры (bin по умолчанию);Вы можете проверить, открыв его в браузере файлов.

Таким образом, чтобы проверить, есть ли файл, вы можете сделать

Path filePath = Paths.get("resources", "readme.txt");
System.out.println(Files.exists(filePath));

Если вам нужно как File, вы можете сделать

File readmeFile = filePath.toFile();

Это считывает файл из папки исходного проекта, поэтому он не будет использоваться после запуска программы в другом месте.

Для этого вы можете использовать ClassLoader:

URL readmeUrl = ClassLoader.getSystemClassLoader().getResource("resources/readme.txt"));
File readmeFile = new File(readmeUrl.getFile());
...