Есть несколько проблем с вашим кодом:
Невозможно сравнить строки с '==', так как '==' сравнивает ссылки.Если element.getTagName()
это «а», то, действительно ли это if
в строке 2 вашей вставки, зависит от ситуации, но, вероятно, это не так.
A PrintWriter
являетсяресурс.Ресурсы должны быть закрыты;если вы не закроете их, ресурс останется открытым на неопределенный срок, и это называется утечкой ресурса.Используйте конструкцию автоматического управления ресурсами для удобного способа сделать это.
Вы создаете принтер, приказываете принтеру написать некоторые данные, вы не сбрасываете илизакройте ресурс, затем выполните другой процесс и, наконец, после завершения этого процесса вы очистите / закроете.Это значит, что файл пуст, как буфер печати.Вы должны написать свой файл и затем закрыть свой ресурс, и только потом вызывать внешний процесс;и у вас, и у запускаемого вами процесса, когда один и тот же файл открыт одновременно, сбивает с толку и проблематично, и в этом случае ненужный, так что не надо.
Runtime.getRuntime () .exec () НЕ является bash и НЕ является командной строкой.Концепция перенаправления через >> someFile.txt
- это bashism / command-promptism.Runtime не знает, о чем вы говорите, и просто передаст его в качестве аргумента запущенному процессу.Вызовите bash, если вам нужны функции перенаправления bash, или напишите перенаправление в java, прочитав выходной поток процесса и добавив его в файл самостоятельно.
Применение всех 4 исправлений:
создайте файл с именем 'run.sh', содержащий:
#!/bin/sh
pandoc -f html -t asciidoc contenthtml.html >> contentasciidoc.asciidoc
и обновите свой код Java:
for (Element element : elements) {
if ("a".equalsIgnoreCase(element.tagName()) {
try (PrintWriter writer2 = new PrintWriter("contenthtml.html", "UTF-8")) {
writer2.print(a.ExtractHTMLByIDandDomain(Domain + element.attr("href"), Content_HTML_ID));
}
}
Process proc = Runtime.getRuntime().exec("/usr/bin/bash run.sh");
}