Gherkin Parser Stream не выпускает блокировки файловJAVA

Программисты JAVA общаются здесь
Anonymous
Gherkin Parser Stream не выпускает блокировки файлов

Сообщение Anonymous »

Я использую Gherkin Parser для анализа файлов функций и возврата списка документов Gherkin, см. Функцию ниже: < /p>
import io.cucumber.gherkin.Gherkin;
import io.cucumber.messages.IdGenerator;
import io.cucumber.messages.Messages;
import io.cucumber.messages.Messages.Envelope;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class GherkinUtils {

private static final Logger LOG = LogManager.getLogger(GherkinUtils.class);

public static ArrayList getGherkinDocumentsFromFiles() {

IdGenerator idGenerator = new IdGenerator.Incrementing();

ArrayList listOfGherkinDocuments = new ArrayList();
String pathFolderFrameworkFeatures = SettingsUtils.getPathFolderFrameworkFeatures();
List listOfPathsForFeatureFiles = FileUtils.getAllFilePathsFromFolder(pathFolderFrameworkFeatures);

try (Stream dataStream = Gherkin.fromPaths(listOfPathsForFeatureFiles, false, true, false, idGenerator)){

List envelopes = dataStream.collect(Collectors.toList());
for (Envelope env : envelopes) {
Messages.GherkinDocument gherkinDocument = env.getGherkinDocument();
listOfGherkinDocuments.add(gherkinDocument);
}

} catch (Exception e) {
LOG.error("Error occurred while trying to read the feature files", new Exception(e));
}

FileUtils.renameAllFeatureFiles("b");

return listOfGherkinDocuments;
}
}
< /code>
Непосредственно перед оператором возврата вы можете увидеть функцию, которая обновит имя для всех файлов функций, чтобы проверить, не заблокированы ли они.
Проблема в том, что только в Первый файл всегда переименован, а остальные всегда заблокированы.
Я понимаю, что оператор TRY автоматически закроет поток. Кроме того, я попытался закрыть его вручную внутри блока Try, но результаты одинаковы. < /P>
Чего мне не хватает? Как я могу сделать это, чтобы выпустить блокировки файла? (За исключением первого, который будет заблокирован): < /p>
List envelopes = dataStream.collect(Collectors.toList());
< /code>
Вот определение функции обновления имени файла, если вы хотите ее протестировать: < /p>
public static void renameAllFeatureFiles(String fileName) {
String pathFeaturesFolder = SettingsUtils.getPathFolderFrameworkFeatures();
List pathList = FileUtils.getAllFilePathsFromFolder(pathFeaturesFolder);

int counter = 0;
for (String path : pathList) {
counter ++;
File file = new File(path);
File newFile = new File(pathFeaturesFolder + "\\" + fileName +counter+".feature");
System.out.println("File: " + path + " locked: " + !file.renameTo(newFile));
}
}
< /code>
И вот пример файла функции: < /p>
Feature: Test

Scenario: test 1
Given User will do something
And User will do something

Обновление 2:
Пробое с отдельным потоком, используя задачу javafx, все же проблема: (
За исключением одного файла (это действительно странно) все файлы заблокированы ... < /p>
public static void runInNewThread() {

// define the execution task that will run in a new thread
Task newTask = new Task() {

@Override
protected Void call() {

ArrayList listOfGherkinDocuments = GherkinUtils.getGherkinDocumentsFromFiles();

return null;
}
};

// run the task in a new thread
Thread th = new Thread(newTask);
th.setDaemon(true);
th.start();
}


Подробнее здесь: https://stackoverflow.com/questions/634 ... file-locks

Вернуться в «JAVA»