Стандартный краткий способ скопировать файл в Java?

Обратите внимание, что обратный вызов - это одно слово.

Очень важна страница обратного вызова википедии .

quote from wikipedia page:

В компьютерном программировании обратный вызов является ссылкой на исполняемый код или часть исполняемого кода, который передается в качестве аргумента другому коду. Это позволяет программному уровню более низкого уровня вызывать подпрограмму (или функцию), определенную на уровне более высокого уровня.

blockquote>

414
задан Peter 20 September 2008 в 01:59
поделиться

6 ответов

Как инструментарий упоминает выше, Apache палата общин, IO является способом пойти, конкретно FileUtils. copyFile () ; это обрабатывает весь тяжелый подъем для Вас.

И как постскриптум, обратите внимание, что последние версии FileUtils (такие как эти 2.0.1 выпуска) добавили использование NIO для копирования файлов; NIO может значительно увеличить копирующую файл производительность в значительной части, потому что стандартные программы NIO задерживают копирование непосредственно к ОС/файловой системе, а не обрабатывают его путем чтения и записи байтов через уровень Java. Таким образом, при поиске производительности могло бы стоить проверить использование последней версии FileUtils.

272
ответ дан Steve Blackwell 20 September 2008 в 01:59
поделиться
public static void copyFile(File src, File dst) throws IOException
{
    long p = 0, dp, size;
    FileChannel in = null, out = null;

    try
    {
        if (!dst.exists()) dst.createNewFile();

        in = new FileInputStream(src).getChannel();
        out = new FileOutputStream(dst).getChannel();
        size = in.size();

        while ((dp = out.transferFrom(in, p, size)) > 0)
        {
            p += dp;
        }
    }
    finally {
        try
        {
            if (out != null) out.close();
        }
        finally {
            if (in != null) in.close();
        }
    }
}
6
ответ дан user3200607 20 September 2008 в 01:59
поделиться

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

, Чтобы к действительно копии или перемещению файл, т.е. получить тот же результат как копирование с командной строки, на самом деле необходимо использовать собственный инструмент. Или сценарий оболочки или JNI.

, По-видимому, это могло бы быть зафиксировано в java 7 - http://today.java.net/pub/a/today/2008/07/03/jsr-203-new-file-apis.html . Пальцы скрещены!

24
ответ дан brad 20 September 2008 в 01:59
поделиться

Я избежал бы использования мега API как апачское свободное городское население. Это - упрощенная операция и его встроенный в JDK в новом пакете NIO. Это было отчасти уже связано с в предыдущем ответе, но ключевой метод в API NIO является новыми функциями "transferTo" и "transferFrom".

http://java.sun.com/javase/6/docs/api/java/nio/channels/FileChannel.html#transferTo (долго, %20long, %20java.nio.channels. WritableByteChannel)

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

public static void copyFile(File sourceFile, 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 {
        if(source != null) {
            source.close();
        }
        if(destination != null) {
            destination.close();
        }
    }
}

Изучение NIO может быть немного хитрым, таким образом, Вы могли бы хотеть просто доверять этому механику перед уходом и попыткой изучить NIO в течение ночи. От личного опыта это может быть очень твердая вещь учиться, не имеете ли Вы опыта и были представлены IO через java.io потоки.

276
ответ дан 3 revs, 3 users 73% 20 September 2008 в 01:59
поделиться

Доступно как стандарт в Java 7, path.copyTo: http://openjdk.java.net/projects/nio/javadoc/java/nio/file/Path.html http://java.sun.com/docs/books/tutorial/essential/io /copy.html

Не могу поверить, что им потребовалось так много времени, чтобы стандартизировать что-то настолько распространенное и простое, как копирование файлов: (

19
ответ дан 22 November 2019 в 23:26
поделиться

В библиотеке Google Guava также есть метод копирования :

public static void copy(File from,
                        File to)
                 throws IOException
Копирует все байты из одного файла в другой.

Предупреждение: Если от до представляет существующий файл, этот файл будет перезаписан содержимым из . Если с по и из относятся к тому же файлу, содержимое этого файла будет удален.

Параметры: от - исходный файл до - целевой файл

Выдает: IOException - если возникает ошибка ввода / вывода IllegalArgumentException - если from.equals (to)

22
ответ дан 22 November 2019 в 23:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: