2010-11-07 3 views
1

Я пытаюсь застегнуть следующую структуру файла на моей машине,пронестись структуру папок с помощью Java

parent/ 
parent/test1 
parent/test1/image1.jpeg 
parent/test2 

Проблема здесь я не могу пронестись вышеуказанную структуру файла с помощью Java. У меня есть Google и нашел следующий пример кода, но он только zip файлы только внутри данной папки.

 File inFolder=new File("out"); 
    File outFolder=new File("Out.zip"); 
    ZipOutputStream out = new ZipOutputStream(new 
BufferedOutputStream(new FileOutputStream(outFolder))); 
    BufferedInputStream in = null; 
    byte[] data = new byte[1000]; 
    String files[] = inFolder.list(); 
    for (int i=0; i<files.length; i++) 
     { 
     in = new BufferedInputStream(new FileInputStream 
(inFolder.getPath() + "/" + files[i]), 1000);     
out.putNextEntry(new ZipEntry(files[i])); 
     int count; 
     while((count = in.read(data,0,1000)) != -1) 
     { 
      out.write(data, 0, count); 
      } 
     out.closeEntry(); 
     } 
     out.flush(); 
     out.close(); 

В приведенной выше коде из папка, и мы должны иметь некоторые files..also папки не может быть пустыми, если так бросает java.util.zip.ZipException исключения или не может содержать вложенные папки, даже файлы внутри него (например: out \ newfolder \ image.jpeg), если он выдает java.io.FileNotFoundException: out \ newfolder (Access is denied).

В моем случае im costructig приведенная выше структура файла, запросив базу данных, может быть у вас есть пустые папки вдоль структуры папок.

Может кто-нибудь, пожалуйста, скажите мне решение?

Thank you.

+0

Возможный дубликат [java.util.zip - Восстанавливающая структура каталогов] (http://stackoverflow.com/questions/1399126/java-util-zip-recreating-directory-structure) – McDowell

ответ

2

напишите два метода. Первый из них принимает dirpath, делает почтовый поток и вызывает другой метод, который копирует файлы в почтовый поток и вызывает себя рекурсивно для каталогов, как показано ниже:

  1. открыть вход в почтовый поток для данного каталога
  2. список файлов и директорий в данном каталоге, проведите через них
  3. если запись является файлом, откройте запись, скопируйте содержимое файла в запись, закройте ее
  4. если запись является каталогом, вызовите этот метод. Передача почтового потока
  5. закрыть запись.

Первый способ закрывает почтовый поток.

+0

Спасибо, khachick за ваш ответ – Harshana

3

Возможно, что вы пытаетесь обрабатывать каждый как FileInputStream. Однако для каталога это неверно. Поскольку путь не к файлу, когда вы пытаетесь его прочитать, вызывается FileNotFoundException. Для каталогов вы все равно хотите создать ZipEntry, но вместо того, чтобы читать какие-либо данные, просто пропустите его и перейдите к следующему пути.

+0

благодарит Nader .. очень полезно – Harshana