Я обычно нахожу обходной путь для проблем, но на этот раз я не могу найти его.
Я делаю компилятор для самостоятельно разработанного языка с использованием JavaCC. Раньше я просто использовал System.in для чтения файлов, поэтому я знаю, что мой компилятор может использовать любой текстовый файл с любым расширением.
Этот проект должен открывать только файлы с пользовательским расширением (.bait). По моим исследованиям, в Java есть множество способов получить расширение файла, но все они требуют полного пути. Предполагается, что мой компилятор запускается из любого места на диске пользователя через терминал (CMD), поэтому я не думаю, что параметры Java полезны.
Вопрос: Как я могу отфильтровать расширение файла данного файла, если компилятор отклоняет источник, если это не .bait?
Исходный код, который я использую, довольно прост:
hook analizador = new hook (System.in);
analizador.RunLexer();
'hook' - это класс, а RunLexer () - метод лексического анализа. Код позволяет анализировать любой текстовый код. Для правила расширения я подумал об использовании регулярного выражения * .bait, как в:
hook analizador = new hook (new FileInputStream("*.bait"));
analizador.codigo();
и
InputStream input = new FileInputStream("*.bait");
hook analizador = new hook (input);
пока без удачи. Кто-нибудь может направить меня с этим? Объяснение ответа будет с благодарностью.
РЕДАКТИРОВАТЬ: Благодаря sepp2k и MeetTitan.
System.in не был опцией, поэтому вместо всех необходимых проверок может использоваться имя файла (используется в качестве аргумента):
String arc = args[0];
if(arc.endsWith(".bait")){ //checks file extention
File src = new File(arc); //created just to use exists()
if(src.exists()){
FileReader fr = new FileReader(arc); //used instead of System.in
hook analizador = new hook(fr);
} else System.out.println("File not found");
} else System.out.println("Invalid filetype");
Что касается способа использования программы, используя терминал (CMD)
java hook file.bait
Этот код не позволяет пользователю запускать файлы .bait из каталога ловушек, как предполагалось, поэтому он безопасен, даже если в разных местах находится несколько копий файла.
Надеюсь, это кому-нибудь пригодится, и еще раз спасибо, sepp2k и MeetTitan!