Lingchao Chen created IO-609:
--------------------------------

             Summary: FileUtils.copyToFile backward incompatibility bug
                 Key: IO-609
                 URL: https://issues.apache.org/jira/browse/IO-609
             Project: Commons IO
          Issue Type: Bug
    Affects Versions: 2.6
            Reporter: Lingchao Chen


Hi,

The following code snippets throw an IOException: Stream closed. It works well 
before commons-io 2.6. When I update commons-io to 2.6, it failed. There is a 
backward incompatibility bug behind it.

The function code:

{code:java}
public class Demo {
          private void backupFile(String srcPath, String entryPath, 
ZipOutputStream stream) throws IOException {
                    ZipEntry zipEntry = new ZipEntry(entryPath);
                    stream.putNextEntry(zipEntry);
                    Files.copy(Paths.get(srcPath), stream);
                  }
          private void backupDir(String srcDir, String dstDir, ZipOutputStream 
stream) throws IOException {
                    File dir = new File(srcDir);
                    for (String path : dir.list()) {
                      System.out.println(path);
                      backupFile(dir.getAbsolutePath() + File.separator + path, 
dstDir + File.separator + path, stream);
                    }
                  }
          public void backup(String name) throws IOException {
                      
Files.createDirectories(Paths.get("/Users/chenlingchao/eclipse_projects/workspace/BBI.BugDetection"));
                      ZipOutputStream stream = new ZipOutputStream(
                          
Files.newOutputStream(Paths.get("/Users/chenlingchao/eclipse_projects/workspace/BBI.BugDetection/tmp"
 + File.separator + name)));
                      try {
                        
backupDir("/Users/chenlingchao/eclipse_projects/workspace/BBI.BugDetection/tmp",
 "meta" + File.separator + "tables", stream);
                        stream.closeEntry();
                      } finally {
                        stream.close();
                      }
                    }
          
          public void restore(String name) throws IOException {
                      ZipInputStream stream = new ZipInputStream(
                          
Files.newInputStream(Paths.get("/Users/chenlingchao/eclipse_projects/workspace/BBI.BugDetection/tmp"
 + File.separator + name)));
                      try {
                        ZipEntry entry;
                        while ((entry = stream.getNextEntry()) != null) {
                          FileUtils.copyToFile(stream, new 
File("/Users/chenlingchao/eclipse_projects/workspace/BBI.BugDetection/tmp" + 
File.separator + entry.getName()));
                        }
                      } finally {
                        stream.close();
                      }
                  }
}
{code}

The test code:

{code:java}
        @Test
        public void TestDemo() throws IOException{
    Demo test = new Demo();
    test.backup("test.zip");
    test.restore("test.zip");
        }
        
{code}





--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to