2014-11-24 192 views
0

我有一个文件夹在我的资源我想提取到磁盘时,第一次启动应用程序。我确实有这种代码的和平,我试图将它们复制到磁盘,但我得到的只是空文件。该文件夹包含.gnh文件。我在哪里丢失我的文件字节?Java保存资源文件夹到磁盘文件夹

public void getTemplates() throws URISyntaxException { 
    final URL url = TemplateUtils.class.getResource("/templates/"); 
    if (url != null) { 
     final File dir = new File(url.toURI()); 
     for (final File file : dir.listFiles()) { 
      try { 


       final OutputStream outStream = new FileOutputStream(
         PathManager.INSTANCE.getRootPath() + file.getName()); 

       final long writtenBytes = Files.copy(file.toPath(), outStream); 
       LOG.info(writtenBytes); 
       outStream.flush(); 
       outStream.close(); 


      } catch (final IOException e) { 
       LOG.error(e.getMessage(), e); 
      } 
     } 
    } 
} 

的LOG.info(writtenBytes)说0

编辑: 当我复制简单的文本文件一切工作正常。但是对于那些.gnh文件,没有任何工作了。是否有另一种方法将这些文件提取到磁盘?

+0

你对fileInfo有什么意思?我在这一点上记录了file.length(),它是零。所以我尝试了一个简单的文本文件,我的方法工作。看起来问题是这个愚蠢的.gnh FileFormat。还有另一种方法来复制/提取文件夹? – Tobi 2014-11-24 15:41:57

+0

错误的评论。我误解了 。删除它 – 2014-11-24 16:20:06

回答

0

我得到了解决方案:您需要先为OutputStream创建File,然后才能刷新它。

final File path = new File(
      PathManager.INSTANCE.getRootPath() + "templates"); 
    path.mkdirs(); 
     final File newFile = new File(path.toString() 
       + File.separator + file.getName()); 
    newFile.createNewFile(); 
    final OutputStream outStream = new FileOutputStream(newFile); 
    Files.copy(file.toPath(), outStream); 
    outStream.flush(); 
    outStream.close();