java.io.IOException:进程无法访问该文件,因为另一个进程已锁定一部分 - 在Windows中使用IOUtils.copyLarge()时

时间:2015-07-08 09:27:12

标签: java windows file-io

问题源于此try块中具体的代码行:

try {
            fInputStream = new FileInputStream(path);
#thisLine   byteCount += IOUtils.copyLarge(fInputStream, fOutputStream);
            fileCount++;
    }

堆栈跟踪如下所示:

java.io.IOException: The process cannot access the file because another 
process has locked a portion 
 of the file 
        at java.io.FileInputStream.readBytes(Native Method) 
        at java.io.FileInputStream.read(FileInputStream.java:233) 
        at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1719) 
        at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1696) 

这似乎是特定于Windows的问题。是否有一些特定于Windows的文件I / O最佳实践可能会丢失?

2 个答案:

答案 0 :(得分:1)

我通过传递先前创建的 let cookiesotp = new Cookies(req, res, { keys: keysotp }) // for one month coooke set cookiesotp.set('LastVisit',new Date().toISOString(),{ domain: '.makeitdouble.com', path: '/', secure: true,HttpOnly:true, signed: true,maxAge:2628000000}); 对象解决了该问题。

fileChannel

然后我创建了FileChannel fileChannel = FileChannel.open(path, StandardOpenOption.READ,StandardOpenOption.WRITE); 对象,如下所示:

InputStream

它起作用了,没有更多的异常发生了。

答案 1 :(得分:0)

检查另一个进程是否正在访问同一文件。在Windows上按照这篇文章来弄清楚 - > https://superuser.com/questions/399659/how-can-i-identify-what-application-is-using-a-given-file

只要没有其他进程访问同一个文件,它就应该正常工作。

要确保您可以实际访问该文件,请考虑阅读以下主题 - > Java: Check if file is already open