Собственный код JDK для копирования файлов - PullRequest
3 голосов
/ 31 марта 2010

Есть ли собственный код JDK для копирования файлов (буферы, потоки или что-то еще)?

Ответы [ 4 ]

3 голосов
/ 31 марта 2010

Это предпочтительный способ копирования файла, начиная с JDK 1.4 и более поздних версий

public static void copyFile(final File sourceFile, final File destFile) throws IOException
{
    if (!destFile.exists())
    {
        destFile.createNewFile();
    }

    FileChannel source = null;
    FileChannel destination = null;
    try
    {
        source = new FileInputStream(sourceFile).getChannel();
        destination = new FileOutputStream(destFile).getChannel();
        destination.transferFrom(source, 0, source.size());
    }
    finally
    {
       source.close();
       destination.close();
    }
}

публичная абстрактная длинная передача из (ReadableByteChannel src, длинная позиция, длинный счет) выдает IOException

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

2 голосов
/ 31 марта 2010

Если под «нативным» вы подразумеваете «часть стандартного API Java» (а не зависимый от платформы код, который обычно называется «нативным» в мире Java), а под «копированием файлов» вы подразумеваете «единственный метод, берет файл и целевой путь и создает копию содержимого файла "тогда нет, в стандартном API такого метода нет. Вы должны открыть InputStream и OutputStream (опционально получить их более эффективные FileChannel s) и использовать буфер для передачи байтов. Удобные одиночные методы для вызова находятся в Apache Commons IO .

Обновление: Начиная с Java 7, функция копирования файлов стала частью стандартного API в java.nio.file.Files

2 голосов
/ 31 марта 2010

Ваш лучший вариант - использовать Java NIO:

http://java.sun.com/javase/6/docs/api/java/nio/package-summary.html

Буферы см .:

http://java.sun.com/javase/6/docs/api/java/nio/package-summary.html#buffers

Для просмотра потока см. Следующую статью:

http://java.sun.com/docs/books/tutorial/essential/io/file.html#readStream

На основе этого построены фреймворки, а именно Mina и Netty:

0 голосов
/ 29 апреля 2011

Просто добавьте, что JDK7 определяет несколько методов копирования в java.nio.file.Files, включая копирование файлов и копирование файлов в / из потоков.

...