Копирование файлов с использованием Java может использоваться везде. Вот класс для вашей ссылки. Всего есть два метода:
Public Static Boolean CopyFile (String srcfilename, String destfilename, логическое наложение); Public Static Boolean CopyDirctory (String srcdirname, String destdirname, Boolean Overlay);
в:
Имя файла srcfilename для копирования
Имя целевого файла descfilename
наложение, если целевой файл существует, будь то перезаписать его. Если копия успешна, верните True, в противном случае верните ложные
Код:
Импорт java.io.file; импортировать java.io.fileinputstream; Импорт java.io.filenotFoundException; Импорт java.io.fileOutputStream; импортировать java.io.ioexception; импортировать java.io.inputstream; импортировать java.io.outputstream; импортировать javax.swing.joptionpane; / ** * Копировать файл или папку * * Zww */ public Class CopyFileutil {private Static String message = ""; / ** * Скопируйте один файл * * @param srcfilename * Имя файла, чтобы быть скопированным * @param descfilename * Имя целевого файла * @param alplay * Если целевой файл существует, будь то перезапись * @return, если копия успешна, вернуть истинную, иначе возвращайте falseanam новый файл (srcfilename); // Определите, существует ли исходный файл, если (! Srcfile.exists ()) {message = "Исходный файл:" + srcfilename + "не существует!"; Joptionpane.showmessageDialog (null, сообщение); вернуть ложь; } else if (! srcfile.isfile ()) {message = "Файл копирования не удался, исходный файл:" + srcfilename + "не файл!"; Joptionpane.showmessageDialog (null, сообщение); вернуть ложь; } // Определите, существует ли целевой файл file destfile = new File (destfilename); if (destfile.exists ()) {// Если целевой файл существует, и позволяет перезаписать if (overlay) {// Удалить существующий целевой файл, независимо от того, является ли целевой файл каталогом или одним файлом нового файла (destfileName) .delete (); }} else {// Если каталог, в котором целевой файл не существует, создайте каталог if (! destfile.getParentFile (). существует ()) {// каталог, в котором целевой файл не существует, если (! destfile.getParentFile (). MkDirs ()) {// не удалось копировать файл: не удалось создать файл, где целевой файл возвращается; }}} // Копировать файл int byteread = 0; // количество байтов считывает inputstream in = null; OutputStream Out = null; try {in = new FileInputStream (srcfile); out = new FileOutputStream (destFile); Byte [] buffer = новый байт [1024]; while ((byteread = in.read (buffer))! = -1) {out.write (буфер, 0, байтеред); } вернуть true; } catch (filenotFoundException e) {return false; } catch (ioException e) {return false; } наконец {try {if (out! = null) out.close (); if (in! = null) in.close (); } catch (ioException e) {e.printstackTrace (); }}}} / ** * Скопируйте содержимое всего каталога * * @param srcdirname * Имя каталога каталога, который будет скопирован * @param destdirname * Имя направления назначения * @param наложение * Если целевой каталог существует, будь то перевернуть * @retur destdirname, boolean overlay) {// определить, существует ли исходный каталог файл srcdir = new File (srcdirname); if (! srcdir.exists ()) {message = "Справочник по копии не удастся: исходный каталог" + srcdirname + "не существует!"; Joptionpane.showmessageDialog (null, сообщение); вернуть ложь; } else if (! srcdir.isdirectory ()) {message = "Справочник копирования не удастся:" + srcdirname + "не каталог!"; Joptionpane.showmessageDialog (null, сообщение); вернуть ложь; } // Если имя целевого каталога не заканчивается с помощью делиминации файла, добавьте файл deLimiter if (! Destdirname.endswith (file.separator)) {destdirname = destdirname + file.separator; } Файл destdir = new File (destdirName); // Если целевая папка существует if (destdir.exists ()) {// Если разрешено наложение, удалите существующий целевой каталог if (overlay) {new File (destdirName) .delete (); } else {message = "Copy Directory Fail: Destination Directory" + destdirname + "уже существовал!"; Joptionpane.showmessageDialog (null, сообщение); вернуть ложь; }} else {// Создать систему каталога назначения. if (! destdir.mkdir ()) {System.out.println ("Копировать каталог не удастся: создание провального каталога назначения!"); вернуть ложь; }} boolean flag = true; File [] files = srcdir.listfiles (); for (int i = 0; i <files.length; i ++) {// копировать файл if (files [i] .isfile ()) {flag = copyFileUtil.copyfile (files [i] .getabsolutepath (), destdirname+files [i] .getName (), overlay); if (! Флаг) перерыв; } else if (files [i] .isdirectory ()) {flag = copyFileutil.copyDirectory (files [i] .getabSolutePath (), destdirName + files [i] .getName (), overlay); if (! Флаг) перерыв; }} if (! flag) {message = "Copy Directory" + srcdirname + "to" + destdirname + "не удалось!"; Joptionpane.showmessageDialog (null, сообщение); вернуть ложь; } else {return true; }} public static void main (string [] args) {string srcdirname = "c:/test/test0/test1"; String destdirName = "c:/ttt"; Copyfileutil.copydirctory (srcdirname, destdirname, true); }}Без рассмотрения многопоточной оптимизации, самый быстрый способ скопировать однопоточные файлы (чем больше файл, тем больше преимущество, он обычно на 30+% быстрее, чем обычно используемые методы):
private static void niotransfercopy (источник файла, файл цели) {fileChannel in = null; FileChannel Out = null; FileInputStream inStream = null; FileOutputStream outstream = null; try {instream = new FileInputStream (Source); upstream = new FileOutputStream (Target); in = instream.getChannel (); out = outstream.getChannel (); in.transferto (0, in.size (), out); } catch (ioException e) {e.printstackTrace (); } наконец {close (instream); закрыть (в); Закрыть (Outstream); закрыть (Out); }}Если вам нужно контролировать прогресс репликации, вы можете использовать второй самый быстрый метод (обратите внимание на размер буфера, который оказывает большое влияние на скорость):
private static void niobuffercopy (источник файла, цель файла) {fileChannel in = null; FileChannel Out = null; FileInputStream inStream = null; FileOutputStream outstream = null; try {instream = new FileInputStream (Source); upstream = new FileOutputStream (Target); in = instream.getChannel (); out = outstream.getChannel (); Bytebuffer buffer = bytebuffer.allocate (4096); while (in.read (buffer)! = -1) {buffer.flip (); out.write (buffer); buffer.clear (); }} catch (ioException e) {e.printstacktrace (); } наконец {close (instream); закрыть (в); Закрыть (Outstream); закрыть (Out); }}Обычно используется метод 1 :
private static void CustomBufferBuffereStreamCopy (источник файла, файл цели) {inputStream fis = null; OutputStream fos = null; try {fis = new BufferedInputStream (New FileInputStream (Source)); fos = new BufferedOutputStream (New FileOutputStream (Target)); Byte [] buf = новый байт [4096]; int i; while ((i = fis.read (buf))! = -1) {fos.write (buf, 0, i); }} catch (Exception e) {e.printstackTrace (); } наконец {close (fis); закрыть (FOS); }}Обычно используется метод 2 :
private static void CustomBufferStreamCopy (источник файла, файл цели) {inputStream fis = null; OutputStream fos = null; try {fis = new FileInputStream (Source); fos = new FileOutputStream (Target); Byte [] buf = новый байт [4096]; int i; while ((i = fis.read (buf))! = -1) {fos.write (buf, 0, i); }} catch (Exception e) {e.printstackTrace (); } наконец {close (fis); закрыть (FOS); }}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.