我有一个非常奇怪的问题。我正在尝试下载一些文件和存储。我的代码相对简单直接(见下文),在我的本地机器上工作正常。
但它的目的是在通过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;
}