IOException访问Citrix挂载的驱动器时磁盘空间不足

And*_*ohr 5 java windows citrix

我有一个非常奇怪的问题.我正在尝试下载一些文件和存储.我的代码相对简单直接(见下文),在我的本地机器上工作正常.

但它旨在在通过Citrix和VPN访问的Windows终端服务器上运行.该文件将保存到已安装的网络驱动器中.此挂载是通过Citrix VPN挂载的本地C:\驱动器,因此可能存在一些延迟.不幸的是,我没有详细说明整个基础设施是如何设置的...

现在我的问题是下面的代码抛出IOException告诉我在尝试执行write()调用时磁盘上没有剩余空间.目录结构创建正常,并创建零字节文件,但永远不会写入内容.

驱动器上有超过1 GB的可用空间,Citrix客户端已获得"完全访问"权限,并使用Windows资源管理器或记事本复制/写入该映射驱动器上的文件.只有Java在这给我带来麻烦.

我还尝试首先下载到临时文件然后将其复制到目标,但由于复制基本上与我原始代码中的流操作相同,因此行为没有变化.它仍然因磁盘空间不足而失败.

我不知道还有什么可以尝试的.你能提出什么建议吗?

public boolean downloadToFile(URL url, File file){                                                                  
    boolean ok = false;                                                                                             

    try {                                                                                                           
        file.getParentFile().mkdirs();                                                                              

        BufferedInputStream  bis = new BufferedInputStream(url.openStream());                                       
        byte[]            buffer = new byte[2048];                                                                  
        FileOutputStream     fos = new FileOutputStream(file);                                                      
        BufferedOutputStream bos = new BufferedOutputStream( fos , buffer.length );                                 
        int size;                                                                                                   
        while ((size = bis.read(buffer, 0, buffer.length)) != -1) {                                                 
            bos.write(buffer, 0, size);                                                                             
        }                                                                                                           
        bos.flush();                                                                                                
        bos.close();                                                                                                
        bis.close();                                                                                                

        ok = true;                                                                                                  
    }catch(Exception e){                                                                                            
        e.printStackTrace();                                                                                        
    }                                                                                                               

    return ok;                                                                                                      
}
Run Code Online (Sandbox Code Playgroud)

pow*_*cha 1

尝试一下commons-io。特别是 Util 类FileUtilsIOUtils

更改我们的代码以使用commons-io所有文件操作后,情况变得更加糟糕。即使有映射的网络驱动器。