javanio与Windows磁盘访问
Java NIO在Windows上是否需要特殊权限 当我在Windows Server 2003上运行以下Java代码时,它失败并出现“拒绝访问”错误(这是cygwin终端窗口中的全部消息): 但是,如果我使用Apache commons io(我假设它不使用NIO,它使用相同的输入和输出文件:javanio与Windows磁盘访问,java,windows,file-permissions,nio,Java,Windows,File Permissions,Nio,Java NIO在Windows上是否需要特殊权限 当我在Windows Server 2003上运行以下Java代码时,它失败并出现“拒绝访问”错误(这是cygwin终端窗口中的全部消息): 但是,如果我使用Apache commons io(我假设它不使用NIO,它使用相同的输入和输出文件: final FileInputStream inputStream = new FileInputStream(inputFile) final FileOutputStream outputStrea
final FileInputStream inputStream = new FileInputStream(inputFile)
final FileOutputStream outputStream = new FileOutputStream(outputStream)
IOUtils.copy(inputStream, outputStream);
我使用管理员帐户在Java 5中运行。是否必须设置一些特殊的文件权限?在什么上下文中执行?是否有使用同一文件的并发线程 如果是您的情况,则FileChannel会锁定正在使用的全部或部分文件。锁定方法(部分文件或全部文件)取决于平台格式,并且windows 2003可能已被此技术淘汰 解决方案:更改操作系统或使用apache commons IO
注意:如果您在一个请求中阻止了文件,但没有取消阻止,则必须重新启动jvm。原因在代码中:
newfileoutputstream(outputFile).getChannel()
.transferFrom(新文件InputStream(inputFile).getChannel(),0,Long.MAX_值);
代码在几个层面上都是错误的
- 如果没有关闭流,则异常很可能意味着文件无法写入。如果用户能够实际访问,“拒绝访问”类型的异常会导致资源泄漏(即未关闭),从而阻止任何其他操作完成
- 在windows上,TransferTo/From是无用的,因为操作系统不支持它,因此它实际工作的原因是:它是模拟的。在Linux/Solaris/MacOS上,它可以只传输X字节,然后就可以完成了
final FileInputStream inputStream = new FileInputStream(inputFile)
final FileOutputStream outputStream = new FileOutputStream(outputStream)
IOUtils.copy(inputStream, outputStream);