Копирование файлов на Java - PullRequest
       46

Копирование файлов на Java

3 голосов
/ 01 сентября 2009

Что является лучшим вариантом (с точки зрения производительности): копирование файла с использованием fileinputstream и fileoutputstream или выполнение специальной команды ОС для копирования команды из Java?

Ответы [ 4 ]

2 голосов
/ 01 сентября 2009

Используйте превосходную библиотеку commons-io, у нее есть метод , который будет делать именно это. Он очень широко используется и уверен, что он очень оптимизирован.

Загрузите его с здесь или скопируйте POM-зависимость в файл pom.xml при использовании maven .

Не копируйте с конкретной копией ОС, она не будет переносимой. Использование не Java-кода из Java, будь то с JNI или порождением внешней команды, является головной болью и кошмаром обслуживания.

2 голосов
/ 01 сентября 2009

Сделайте это на Java.

Одной из проблем при запуске команды ОС является то, что вам нужно создать полный процесс на уровне ядра ОС, и это тяжелая операция. Существуют большие фиксированные накладные расходы, которые будут особенно серьезными для небольших файлов.

Другая проблема заключается в том, что она добавляет системную зависимость без уважительной причины.

2 голосов
/ 01 сентября 2009

Я вполне уверен, что использование конкретной команды копирования ОС будет быстрее или, по крайней мере, так же быстро, как простое решение, написанное самим собой. Специфичная для ОС команда, вероятно, использует разумный размер буфера и другие оптимизации, которые в противном случае вам пришлось бы выяснять самостоятельно.

Edit:
х-х прав, вы не должны вызывать команду копирования напрямую. Я думал, что в Java уже есть метод копирования, например File.copy () или что-то еще, но я не смог найти ничего, даже в JDIC. Так что Apache Commons IO - это, вероятно, верный путь.

1 голос
/ 01 сентября 2009

Зависит от того, что вы будете делать в случае ошибок. Часто собственная команда лучше справляется с ошибочными ситуациями, но вам может быть трудно заставить ее взаимодействовать с пользователем.

Чистое решение Java (помимо кроссплатформенности) позволяет вам полностью контролировать - я бы предложил использовать библиотеку для обработки беспорядочных деталей и ситуаций ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...