Mehrere Methoden zum Kopieren von Java-Dateien

1、InputStream与OutputStream 

Erstellen Sie zwei Dateien – Quelle und Ziel. Dann erstellen wir InputStream aus der Quelle und schreiben ihn mithilfe von OutputStream für den Java-Dateikopiervorgang in die Zieldatei.

private static void copyFileUsingStream(File source, File dest) throws IOException {
    InputStream is = null;
    OutputStream os = null;
    try {
        is = new FileInputStream(source);
        os = new FileOutputStream(dest);
        byte[] buffer = new byte[1024];
        int length;
        while ((length = is.read(buffer)) > 0) {
            os.write(buffer, 0, length);
        }
    } finally {
        is.close();
        os.close();
    }
}

2、Apache Commons IO FileUtils

copyFile(File srcFile, File destFile) kann zum Kopieren von Dateien in Java verwendet werden. Wenn Sie in Ihrem Projekt bereits Apache Commons IO verwenden, ist es sinnvoll, es zur Vereinfachung Ihres Codes zu verwenden. Es verwendet intern einen Java NIO FileChannel, sodass Sie diese Wrapper-Methode vermeiden können, wenn Sie sie nicht bereits für andere Funktionen verwenden. Das Folgende ist die Methode zur Verwendung von Apache Commons io für den Java-Kopierdateivorgang

private static void copyFileUsingApacheCommonsIO(File source, File dest) throws IOException {
    FileUtils.copyFile(source, dest);
}

3. Die copy()-Methode der Files-Klasse kopiert Dateien in Java

private static void copyFileUsingJava7Files(File source, File dest) throws IOException {
    Files.copy(source.toPath(), dest.toPath());
}

4. Verwenden Sie den effizienten Bytestream BufferedInputStream/BufferedOutputStream zum Kopieren von Dateien

private static void bufferedStreamCopyFile(File srcFile, File desFile) throwsIOException {
         //使用缓冲字节流进行文件复制
         BufferedInputStream bis = new BufferedInputStream(newFileInputStream(srcFile));
         BufferedOutputStream bos = new BufferedOutputStream(newFileOutputStream(desFile));
         byte[] b = new byte[1024];
         Integer len = 0;
         //一次读取1024字节的数据
         while((len = bis.read(b)) != -1) {
             bos.write(b, 0, len);
 }
 bis.close();
 bos.close();
}

5. Verwenden Sie den FileReader/FileWriter-Zeichenstrom zum Kopieren von Dateien

Beachten Sie, dass diese Methode nur Dateien kopieren kann, die nur Zeichen enthalten. Das bedeutet, dass Sie die Datei lesen können, wenn Sie sie mit Notepad öffnen

private static void readerWriterCopyFile(File srcFile, File desFile) throwsIOException  {
         //使用字符流进行文件复制,注意:字符流只能复制只含有汉字的文件
         FileReader fr = newFileReader(srcFile);
         FileWriter fw = newFileWriter(desFile);
         
         Integer by = 0;
         while((by = fr.read()) != -1) {
 fw.write(by);
 }
         
 fr.close();
 fw.close();
     }

6. Verwenden Sie den effizienten Zeichenstrom BufferedReader/BufferedWriter zum Kopieren von Dateien

Das bedeutet, dass diese Methode nur Dateien kopieren kann, die nur Zeichen enthalten, was bedeutet, dass Sie die Datei lesen können, wenn Sie sie mit Notepad öffnen

private static void bufferedReaderWriterCopyFile(File srcFile, File desFile)  throwsIOException {
         //使用带缓冲区的高效字符流进行文件复制
         BufferedReader br = new BufferedReader(newFileReader(srcFile));
         BufferedWriter bw = new BufferedWriter(newFileWriter(desFile));
         
         char[] c = new char[1024];
         Integer len = 0;
         while((len = br.read(c)) != -1) {
             bw.write(c, 0, len);
 }
         
         //方式二
         /*String s = null;
 while((s = br.readLine()) != null) {
 bw.write(s);
 bw.newLine();
 }*/
         
 br.close();
 bw.close();
     }

7. Verwenden Sie den effizienten Zeichenstrom BufferedReader/BufferedWriter zum Kopieren von Dateien

Beachten Sie, dass diese Methode nur Dateien kopieren kann, die nur Zeichen enthalten. Das bedeutet, dass Sie die Datei lesen können, wenn Sie sie mit Notepad öffnen

private static void bufferedReaderWriterCopyFile(File srcFile, File desFile)  throwsIOException {
         //使用带缓冲区的高效字符流进行文件复制
        BufferedReader br = new BufferedReader(newFileReader(srcFile));
        BufferedWriter bw = new BufferedWriter(newFileWriter(desFile));
        
         char[] c = new char[1024];
         Integer len = 0;
         while((len = br.read(c)) != -1) {
             bw.write(c, 0, len);
 }
         
         //方式二
         /*String s = null;
 while((s = br.readLine()) != null) {
 bw.write(s);
 bw.newLine();
 }*/
         
 br.close();
 bw.close();
}

8. Kopieren Sie mit FileChannel

Java NIO enthält eine transferFrom-Methode, die laut Dokumentation schneller sein sollte als das Kopieren von Dateistreams

private static void copyFileUsingFileChannels(File source, File dest) throws IOException {   
    FileChannel inputChannel = null;   
    FileChannel outputChannel = null;   
  try { 
    inputChannel = new FileInputStream(source).getChannel(); 
    outputChannel = new FileOutputStream(dest).getChannel(); 
    outputChannel.transferFrom(inputChannel, 0, inputChannel.size()); 
  } finally { 
    inputChannel.close(); 
    outputChannel.close(); 
  } 
} 

Guess you like

Origin blog.csdn.net/LookingTomorrow/article/details/129786440