2013-05-31 5 views
2

Я делаю приложение, которое включает в себя копирование файлов, но когда я перехожу через большой каталог (1000+) и копирую их в другую папку, он использует 290 МБ ОЗУ.Копирование файла без создания файла FileOutputStream

Да, возможно ли каким-либо образом изменить File из FileOutputStream, не создавая новый экземпляр класса FileOutoutStream?

EDIT:

Вот мой Java 7 API версии.

Path source = FileSystems.getDefault().getPath(Drive.getAbsolutePath(), files[i].getName()); 
     Path destination = FileSystems.getDefault().getPath(Save); 
     try { 
     Files.copy(source, destination); 
     } catch (FileAlreadyExistsException e) { 
      File file = new File(Save + files[i]); 
      file.delete(); 
     } 

Имейте в виду, что это в цикле for, который проверяется на 1000+ количество файлов. С текущего метода я использую 270+ Мб ОЗУ

+2

Вы закрываете свои потоки? –

+0

Какая версия Java? От этого зависит идеальный ответ. Java 7 имеет новый API файлов, который намного лучше, чем тот, который был доступен до этого. – fge

+0

Шахта - 7u21. Но использование 7u17 - это опция – zfollette

ответ

1

Взгляните на этот вопрос: Standard concise way to copy a file in Java?

специально

..., Apache Commons IO является путь, в частности, FileUtils.copyFile(); он обрабатывает весь тяжелый подъем для вас.

7

Нет, вы не можете перенаправить FileOutputStream в другой файл.

Если вы используете Java 7, вы можете использовать новый класс Files для копирования файлов. Методы Files.copy() могут выполнять большую часть работы для вас.

В противном случае убедитесь, что вы закрываете свои потоки. До примерочных с-ресурсов Java 7 в, это может выглядеть примерно так:

FileOutputStream out = null; 
try { 
    // Create the output stream 
    // Copy the file 
} catch (IOException e) { 
    // Do something 
} finally { 
    if (null != out) { 
     try { out.close(); } catch (IOException) { } 
    } 
} 
+0

+1, так как OP говорит, что он использует Java 7! Вы могли бы затем упомянуть 'Files.copy()' – fge

+0

Вам также нужно было бы обернуть вызов 'close()' в блоке try-catch, чтобы быть в безопасности. Это приводит к исключенным исключениям Java 7. –

+0

@fge - я ссылался на класс «Файлы», но вы правы, что упоминание Files.copy() явно будет более ясным. Добавлено явное упоминание Files.copy(). –

0

Как насчет NiO 2 из Java 7?

Path source = // ... 
Path target = // ... 
Files.copy(source, target);  

Подробнее см. Javadoc Files.copy(...). См. Также необязательный параметр CopyOption.

Смежные вопросы