#java #eclipse #console
#java #eclipse #консоль
Вопрос:
В настоящее время я работаю над проектом Java, в котором мне нужно открывать файлы, которые я сохранил в каталоге данных рядом с src.
Когда я запускаю свою программу из Eclipse, чтобы получить доступ к этим файлам: я набираю "data/fileName"
, тогда как при использовании консоли я должен вводить "../data/fileName"
.
(Мне не удалось выполнить java src/Main
из каталога проекта и я получил сообщение об ошибке :
Error: Could not find or load main class src.Main.java
Caused by: java.lang.ClassNotFoundException: src.Main.java
)
Есть ли способ сделать мою программу работоспособной как на консоли, так и на Eclipse?
Чтобы дать некоторый контекст: обычно я намеревался работать только в Eclipse, но я столкнулся с проблемами при запуске nano из Eclipse (переменная $ TERM , перенаправление каналов на dev / tty также), поэтому выполнение консоли стало обязательным требованием.
Я не могу изменить свою конфигурацию Eclipse, поскольку этот проект не будет запущен на моем компьютере, и если он не запускается из-за настроек Eclipse по умолчанию, хорошо…
Спасибо за ваши ответы.
Сердечно.
Ответ №1:
ДА. Не помещайте туда эти файлы. Существует 2 широкие категории:
- Данные, доступные только для чтения, которые являются такой же частью вашего приложения, как и ваши файлы классов. Подумайте о «списке состояний США для выпадающего списка «состояние»», «значок png, который будет отображаться в моем пользовательском интерфейсе», «файл, содержащий кучу SQL, который будет использоваться для инициализации пустой базы данных» и многое другое.
Для этого правильный путь YourClass.class.getResourceAsStream("foo.txt")
— это предоставить вам входной поток для чтения файла «foo.txt «, который находится в том же месте «YourClass.class » есть. Даже если он находится, например, в файле jar.
Это означает, что как часть вашей сборки, эти файлы должны быть в jar. ограниченная система сборки eclipse делает это. Если вы повышаете уровень как программист и используете систему сборки (здесь вы должны повышать уровень), поместите их в src / main / resources, и система сборки должна позаботиться об этом.
- Или вторая категория: файлы, которые пользователь должен редактировать, или файлы, которые необходимо изменить вашим приложением.
Они не идут ни в какое сравнение с вашим файлом jar; исполняемый и редактируемый пользователем материал не должны находиться рядом друг с другом. Они должны быть в домашнем каталоге пользователя, вы можете получить его с System.getProperty("user.home")
помощью.
Обратите внимание, что для запуска java-файлов «src» вообще не должен быть частью истории, java
не может запускать исходные файлы, только файлы классов. Кроме того, аргумент — это не каталог, это имя класса. java -cp path/to/your/app.jar com.foo.pkg.YourClass
это то, как вы запускаете Java-код, а не java src/Main
.
Комментарии:
1. Да, и фактически нет никакого возможного способа заставить это работать, не сообщая вашему приложению явно, где искать, например, путем передачи аргумента (который поступит как часть
args
inpublic static void main(String[] args)
.2. Ну, мои файлы относятся ко второй категории. Поскольку это проверенный проект, указания заключались в создании данных рядом с src (похоже, меня учили… нетрадиционная java. Даже система сборки не в курсе! ) Хотя спасибо за информацию. В первом случае использование метода со строковым параметром fileName и последующее создание входного потока с его помощью плохо? Я обычно делаю
javac Main.java
это тогдаjava Main
, поэтому я подумал, что после javacjava src/Main
все будет в порядке.