You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Sebb (JIRA)" <ji...@apache.org> on 2011/04/08 19:26:05 UTC
[jira] [Commented] (IO-266) FileUtils.copyFile() throws IOException
when copying large files to a shared directory (on Windows)
[ https://issues.apache.org/jira/browse/IO-266?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13017556#comment-13017556 ]
Sebb commented on IO-266:
-------------------------
50MB does seem rather large as a default; I would have thought 16MB would be plenty?
Perhaps we should make the default smaller.
It would be possible to add new methods which allowed the buffer size to be provided; however this would mean adding about 7 new methods.
Unfortunately changing the buffersize to a variable would be thread-hostile: if two threads set different values, there is a timing window between setting the value and starting the copy method. This cannot be avoided.
It's a pity the class methods are all static ...
One other possibility would be to allow the default to be set by using a System Property; this could be thread-safe, but the value could not be changed once set.
> FileUtils.copyFile() throws IOException when copying large files to a shared directory (on Windows)
> ---------------------------------------------------------------------------------------------------
>
> Key: IO-266
> URL: https://issues.apache.org/jira/browse/IO-266
> Project: Commons IO
> Issue Type: Bug
> Affects Versions: 2.0.1
> Environment: Windows 2003 Server 64-bit
> Reporter: Igor Smereka
>
> java.io.IOException: Insufficient system resources exist to complete the requested service
> at sun.nio.ch.FileDispatcher.pwrite0(Native Method)
> at sun.nio.ch.FileDispatcher.pwrite(Unknown Source)
> at sun.nio.ch.IOUtil.writeFromNativeBuffer(Unknown Source)
> at sun.nio.ch.IOUtil.write(Unknown Source)
> at sun.nio.ch.FileChannelImpl.write(Unknown Source)
> at sun.nio.ch.FileChannelImpl.transferFromFileChannel(Unknown Source)
> at sun.nio.ch.FileChannelImpl.transferFrom(Unknown Source)
> at org.apache.commons.io.FileUtils.doCopyFile(FileUtils.java:813)
> at org.apache.commons.io.FileUtils.copyFile(FileUtils.java:783)
> at org.test.igor.TestFileUtils.main(TestFileUtils.java:55)
> NOTE: the issue is cased by the function doCopyFile(File srcFile, File destFile, boolean preserveFileDate) using hardcoded data chunks of FIFTY_MB in the transferFrom() call.
> Reducing this chunk from 50M to 31M solves the issue for my situation (32M still fails).
> Here is a test program to reproduce the issue:
> package org.test.igor;
> import java.io.File;
> import java.io.FileInputStream;
> import java.io.FileOutputStream;
> import java.io.IOException;
> import java.nio.channels.FileChannel;
> import org.apache.commons.io.FileUtils;
> import org.apache.commons.io.IOUtils;
> public class TestFileUtils {
> public static void main(String[] args){
>
>
> File src = new File("D:\\2011.1-dev\\test\\test");
> File dest = new File("\\\\ismerek1\\Shared");
>
> String filename = "jdk-6u19-windows-x64.exe";
>
> File file = new File(src, filename);
> File toFile = new File(dest, filename);
>
> try {
> FileUtils.copyFile(file, toFile, true);
> System.out.println("Successful copy");
> }
> catch (IOException e1) {
> e1.printStackTrace();
> }
> }
> }
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira