2

アンマーシャリング前にファイルをロックし、マーシャリング後に解放しようとしています。

public T lockedReadingFromFile(String filePath, Class<T> clas) {
    T object = null;
    JAXBContext context = null;
    Unmarshaller unMarshaller = null;
    try {
        fileToBlock = new File(filePath);
        file = new RandomAccessFile(fileToBlock, "rw");
        FileChannel fileChannel = file.getChannel();
        fileLock = fileChannel.tryLock();
        if (fileLock != null) {
            System.out.println("File is locked");
        }
        context = JAXBContext.newInstance(clas);
        unMarshaller = context.createUnmarshaller();
        object = (T) unMarshaller.unmarshal(fileToBlock);

    } catch (JAXBException e) {
        e.printStackTrace();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return object;
}

しかし、コードはインラインでアンマーシャリング中に例外をスローしますobject = (T) unMarshaller.unmarshal(fileToBlock);

File is locked
javax.xml.bind.UnmarshalException
 - with linked exception:
[java.io.IOException: The process cannot access the file because another process has locked a portion of the file]

なぜこうなった?

4

1 に答える 1