2014-11-03 3 views
2

У меня есть этот объект модели, представляющий исходный файл Java.Хороший способ проверить, является ли файл исходным файлом Java

Он имеет конструктор, как так:

private SourceFile(File file) 

Я хочу этот конструктор на самом деле убедиться, что (насколько это возможно), что File это время дается на самом деле является источником Java.

У меня есть пакетная операция, в которой много текстовых файлов. Некоторые из них являются источниками Java, я не могу отличить их (кроме расширения файла).

Так кто-нибудь был в этой ситуации раньше, и вы можете порекомендовать хороший способ проверить правдоподобие (недействительность, для проверки действительности мне нужно будет ее скомпилировать)?

+3

Вам не нужно его компилировать, но вы можете попытаться разобрать его. Если это разбор, я думаю, можно с уверенностью предположить, что вы имеете дело с исходным файлом Java. – Crozin

+0

если вы скомпилируете и получите ошибку, то это не файл java (я имею в виду, по крайней мере, я ожидаю, что работа будет работать) – SMA

+0

Но если он писал компилятор или интерпретатор, файл может содержать синтаксические ошибки. – poida

ответ

2

Я хотел бы сделать две вещи:

  1. Убедитесь, что файл заканчивается в .java.
  2. Убедитесь, что файл объявляет class с тем же именем, что и файл (см. here).
+0

Это не гарантирует, что это исходный файл Java. Есть много языков, которые имеют ключевые слова «public class». И я думаю, он не хочет полагаться на расширение файла. –

+0

Кстати: Это мог быть комментарий! –

+0

Но сколько языков, которые не являются java, имеют файлы, которые заканчиваются на '.java' и содержат декларацию' public class'? – poida

1

Это зависит от того, насколько вы точны быть точным. Если вы хотите 100%, вам нужно скомпилировать его. Если вы будете довольны чем-то низким, вы можете проверить печатные символы. Разумный уровень может быть достигнут путем проверки работы. И так далее ...

+0

Это мог быть комментарий! –

+0

Это не комментарий. Это ответ. Потому что вопрос отсутствует из логического поля «да-нет». Вопрос в том, что можно считать файлом java. И ответ зависит от точки рассмотрения. Итак, я довожу это до сведения Симеона, чтобы он понял, что нет простого ответа. – Dmytro

+0

Crozin написал комментарий перед вами с точно такими же идеями, и он сделал это замечанием. –

0

Использование javaparser, по данной ссылке wiki способ использования. Но в Java 1.6 у компилятора есть сборка API в JDK, через него вы можете получить доступ к results of the Java parser.

+0

Это выглядит как раз то, что мне нужно. Я обновлю, когда я попробую его – Simeon

+3

@ Симеон, если это решение для вас, тогда примите ответ, пожалуйста;) – 1ac0

+0

Я не буду волноваться. – Simeon

Смежные вопросы