IOException недостаточно места на диске при доступе к смонтированному диску Citrix - PullRequest
5 голосов
/ 06 июля 2011

У меня действительно странная проблема.Я пытаюсь скачать какой-нибудь файл и сохранить.Мой код относительно прост и понятен (см. Ниже) и отлично работает на моем локальном компьютере.

Но он предназначен для работы на терминальном сервере Windows, доступ к которому осуществляется через Citrix и VPN.Файл должен быть сохранен на подключенном сетевом диске.Это монтирование является локальным диском C: \, смонтированным через Citrix VPN, поэтому возможны некоторые задержки.К сожалению, у меня нет внутренней информации о том, как именно настроена вся инфраструктура ...

Теперь моя проблема в том, что приведенный ниже код выдает IOException, сообщая, что на диске не осталось места при попытке выполнитьвызов write ().Структура каталогов создана правильно, файл нулевого байта создан, но содержимое никогда не записывается.

На диске доступно более гигабайта пространства, клиенту 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;                                                                                                      
}

1 Ответ

1 голос
/ 21 июля 2011

Попробуйте с commons-io. Особенно Util Classes FileUtils и IOUtils

После изменения нашего кода для использования commons-io все файловые операции пошли намного быстрее. Даже с подключенными сетевыми дисками.

...