用于复制文件的本机 JDK 代码

发布于 2024-08-26 19:01:52 字数 35 浏览 6 评论 0原文

是否有本地 JDK 代码来复制文件(缓冲区、流或其他)?

Is there a native JDK code to copy files(buffers, streams, or whatever)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

不甘平庸 2024-09-02 19:01:52

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

公共抽象长transferFrom(ReadableByteChannel src,
多头头寸,
长数)
抛出 IOException

...这个方法潜力很大
比简单的循环更有效
从此通道读取并写入
目标频道。许多经营
系统可以直接传输字节
从文件系统缓存到
目标频道实际上没有
复制它们。 ...

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. ...

白龙吟 2024-09-02 19:01:52

如果“本机”指的是“Java 标准 API 的一部分”(而不是平台相关的代码,在 Java 世界中通常称为“本机”),而“复制文件”指的是“采用文件的单个方法”和目标路径并生成文件内容的副本”,那么不,标准 API 中没有这样的方法。您必须打开一个InputStream 和一个OutputStream(可以选择获取更高效的FileChannel)并使用缓冲区来传输字节。可以在 Apache Commons IO< 中找到方便的单一调用方法/a>.

更新:自 Java 7 起,文件复制功能已成为 java.nio.file.Files 中标准 API 的一部分

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

半夏半凉 2024-09-02 19:01:52

补充一下,JDK7在java.nio.file.Files中定义了几种复制方法,包括复制文件和将文件复制到流或从流复制文件。

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文