开发者

Native JDK code to copy files

Is there a native JDK code to cop开发者_JAVA技巧y files(buffers, streams, or whatever)?


This is the preferred way to copy a file since JDK 1.4 and later

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();
    }
}

public abstract long transferFrom(ReadableByteChannel src, long position, long count) throws IOException

... This method is potentially much more efficient than a simple loop that reads from this channel and writes to the target channel. Many operating systems can transfer bytes directly from the filesystem cache to the target channel without actually copying them. ...


If by "native" you mean "part of the Java standard API" (rather than platform-dependant code, which is usually called "native" in the Java world) and by "copy files" you mean "single method that takes a file and a target path and produces a copy of the file's contents" then no, there is no such method in the standard API. You have to open an InputStream and an OutputStream (optionally get their more efficient FileChannels) and use a buffer to transfer bytes. Convenient single methods to call are found in Apache Commons IO.

Update: Since Java 7, file copy functionality has become part of the Standard API in java.nio.file.Files


Your best option is to use Java NIO:

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

For buffers see:

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

For stream however, see the following article:

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

There are frameworks built on top of this, namely Mina and Netty:

  • Mina - http://mina.apache.org/
  • Netty - http://www.jboss.org/netty


Just to add that JDK7 defines several copy methods in java.nio.file.Files, including copying files and copy files to/from streams.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜