java.nio.file.Ошибка исключения FileSystemException в программе, которая копирует изображения .CR2 из одной папки в другую

#java #file-move #filesystemexception

#java #файл-переместить #исключение filesystemexception

Вопрос:

Цель программы — упорядочить изображения на основе даты, в которую они были сделаны. У меня все работает, но перемещение вызывает у меня много проблем. когда я перемещаю его, он всегда работает для первых 2 файлов изображений, а затем начинает выдавать сообщение об ошибке: «Процесс не может получить доступ к файлу, потому что он используется другим процессом». на остальных из них, и я перепробовал много разных способов его перемещения, и он всегда перемещаетсяпервые два и не работает для остальных. Что я делаю не так?

Вот код, который я использую для перемещения:

 // Moves each image file to its respective folder based on the date of creation
private static void moveImages(String mainPath, String[] fileDates, String[] fileNames) 
{
    // Loops through moving each file in the array that contains the dates of each file
    for(int i = 0; i < fileDates.length; i  )
    {
        String fromFile = mainPath   "\"   fileNames[i];
        String toFile = mainPath   "\"   directoryName(fileDates[i])   "\"   fileNames[i];
        
        Path source = Paths.get(fromFile);
        Path target = Paths.get(toFile);
        
        try
        {       
            Files.move(source, target, StandardCopyOption.REPLACE_EXISTING);

            System.out.println("File "   fileNames[i]   " moved successfully"); 
        }
        catch (IOException e) 
        {
            e.printStackTrace();
        }
    }
}
 

Редактировать:

Основной метод, который я использовал для этого кода, заключается в следующем:

 public static void main(String[] args) 
{
    //Stores the path name input by the user for future reference
    String mainPath = userInput();

    //Creates an instance of the data that is collected from the images in the mainPath
    GetData data = new GetData();

    //Creates a reference to the collection of the names of all the images in the mainPath 
    String[] names = data.getNames(mainPath);

    //Creates a reference to the collection of the dates of all the images in the mainPath
    String[] dates = data.getDates(mainPath, names);

    //Create a unique directory for each date extracted from images if it doesn't already exist
    createDirectory(mainPath, dates);

    // Move each image to its respectful directory depending on its creation date
    moveImages(mainPath, dates, names);

    // Lets the user know the program is done running 
    System.out.println("End of program");            
}
 

и ошибка, которую он выводит, заключается в следующем:

 java.nio.file.FileSystemException: C:UsersOwnerDesktoptryIMG_7100.CR2 -> C:UsersOwnerDesktoptryJul 28, 2019IMG_7100.CR2: The process cannot access the file because it is being used by another process.

at java.base/sun.nio.fs.WindowsException.translateToIOException(Unknown Source)
at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
at java.base/sun.nio.fs.WindowsFileCopy.move(Unknown Source)
at java.base/sun.nio.fs.WindowsFileSystemProvider.move(Unknown Source)
at java.base/java.nio.file.Files.move(Unknown Source)
at Organize.moveImages(Organize.java:149)
at Organize.main(Organize.java:29)
 

Комментарии:

1. Пожалуйста, отредактируйте свой вопрос, чтобы показать полную трассировку стека исключения. Также было бы полезно, если бы вы могли написать метод main(), который вызывает вашу функцию и иллюстрирует проблему.

2. Убедитесь, что вы закрываете потоки, если они используются в методах, которые вы не показали — получить даты / имена