Java 6 中 Files#copy() 的替代方法 [重复]

Posted

技术标签:

【中文标题】Java 6 中 Files#copy() 的替代方法 [重复]【英文标题】:Alternative to Files#copy() in Java 6 [duplicate] 【发布时间】:2016-07-23 14:57:44 【问题描述】:

所以这是我的代码,它已经可以工作了:

public class MyServlet extends HttpServlet 
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse response) throws Exception 
        String pathToFile = "myimage.jpg";
        File file = new File(pathToFile);
        response.setHeader("Content-Type", "image/jpeg");
        response.setHeader("Content-Length", String.valueOf(file.length()));
        response.setHeader("Content-Disposition", "inline; filename=\"" + file.getName() + "\"");
        Files.copy(file.toPath(), response.getOutputStream());
        response.flushBuffer();
    

但是,我必须使用 JDK 1.6 来完成这项工作。

Files.copy 仅适用于 Java 1.7。

有什么建议吗?

【问题讨论】:

顺便说一句,response.flushBuffer() 是完全没有必要的。 【参考方案1】:

您可以使用 Apache commons IOutils。

IOUtils.copy(InputStream input, OutputStream output)

【讨论】:

【参考方案2】:

Java 6 没有自带任何现成的文件复制功能,您必须手动创建文件复制过程。要复制文件,只需使用 FileInputStream 将文件转换为字节流,然后使用 FileOutputStream 将字节写入另一个文件。

由于无法使用 JDK 方法更轻松地做到这一点。您可以使用 Apache Commons IO 中的 IOUtils,它还有很多其他有用的东西。

IOUtils.copy(inputStream, outputStream);

或者使用Guava'sByteStreams.copy() 可以实现相同的功能。

ByteStreams.copy(inputStream, outputStream);

【讨论】:

以上是关于Java 6 中 Files#copy() 的替代方法 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Files.copy 是 Java 中的线程安全函数吗?

强制停止在外部线程上运行的 Java Files.copy()

来自 Java NIO2 中的临时文件的 Files.copy 上的 AccessDeniedException

STM32CubeMX生产代码一直卡在copy libraries files的原因

打开eclipse后显示Error: could not open `C:\Program Files\Java\jdk1.6.0-11\lib\i386

Angular 中 angular.copy 的替代方法是啥