Java 1.8: процесс не может получить доступ к файлу, потому что он используется другим процессом - PullRequest
0 голосов
/ 16 января 2020

Я работаю над консольным приложением, использующим Java 1.8, которое будет читать json файлы из каталога. Каждый файл будет обработан и затем перемещен в другую папку. Моя проблема - ошибка, которую вы видите в заголовке этого вопроса.

Это моя функция, чтобы вывести список всех файлов в папке

public static void search(final String pattern, final File folder, List<String> result) {
    for (final File f : folder.listFiles()) {

        if (f.isDirectory()) {
            search(pattern, f, result);
        }

        if (f.isFile()) {
            if (f.getName().matches(pattern)) {

                if(f.length() > 0) {
                    result.add(f.getAbsolutePath());
                }               
            }
        }
    }
}

Это моя функция, чтобы прочитать строку файла

static String readFile(String path, Charset encoding) throws IOException
{
    byte[] encoded = Files.readAllBytes(Paths.get(path));
    return new String(encoded, encoding);
}

Это моя функция для перемещения файла:

private static void moveFile(String filename){

    String pathFrom = moveFilesFrom + filename;
    String pathTo = moveFilesTo + filename;

    try {
        Files.move(Paths.get(pathFrom), Paths.get(pathTo));
    } catch (IOException e) {
        log.error("Failed to move file from " + pathFrom + " to " + pathTo);
        e.printStackTrace();
    }
}

И, наконец, как я использую эти файлы. result - это List<String>, возвращаемое с search:

for (String jsonFile : result) {

    try {

        String jsonString = readFile(jsonFile, Charset.defaultCharset());

        JSONParser parser = new JSONParser();
        JSONObject jsonObject = (JSONObject) parser.parse(jsonString);
        JSONArray data = (JSONArray) jsonObject.get("data");
        long linesAdded = processLines(data);
        totalItemsInserted = totalItemsInserted + linesAdded;

        File f = new File(jsonFile);
        //System.out.println("File "+ f.getName() +" added " + linesAdded + " items. Curent Total:" + totalItemsInserted);
        log.info("File "+ f.getName() +" has "+ data.size() +"items and added " + linesAdded + " items. Curent Total:" + totalItemsInserted);

        if(moveFiles){
            moveFile(f.getName());
        }

    } catch (IOException | ParseException | java.text.ParseException e) {
        e.printStackTrace();
    }

}

Как я могу изменить свой код, чтобы избежать этой ошибки, и если есть способ разблокировать файлы.

Спасибо за помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...