2014-10-27 3 views
0

Я пытаюсь использовать селектор файлов (которому разрешено выбирать только молнии), чтобы дать мне этот файл, а затем я буду выполнять другой метод для каждого отдельного файла в zip. Тем не менее, я борюсь с компилятором, поскольку ожидается, что Generic Files, а не zipFiles. Я пытаюсь использовать этот пример: the marked answer on this postJava Converting File to ZipFile

File zipFile = zfc.getSelectedFile(); 

     ZipInputStream zis; 
     try { 
      zis = new ZipInputStream(new FileInputStream(zipFile)); 

      ZipEntry ze; 

      ze = zis.getNextEntry(); 

      while (ze != null) { 

        InputStream stream = ((ZipFile) zipFile) 
          .getInputStream(ze); 

       //method here that will operate on stream 

       ze = zis.getNextEntry(); 
      } 

     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

В принципе, как я могу прочитать файл из архива в Java или как я изменить ZipEntry в файл.

+0

Если я правильно понял вас ... вам нужно извлечь все файлы zip, которые вы найдете, а затем перейдите по каждому извлеченному файлу. Таким образом, в вашем первом цикле while вы извлекаете все zip-файлы во временную папку, затем во втором цикле вы просматриваете все извлеченные файлы и делаете-что-то еще. – munyul

ответ

1

A java.io.File представляет собой имя файла, физически существующего (или не) на каком-либо подключенном устройстве хранения.

С другой стороны, ZipEntry - это всего лишь некоторые метаданные, которые помогут вам получить доступ к контенту конкретной записи внутри .zip-файла.

Чтобы ответить на ваш первый вопрос: если вы ДОЛЖНЫ иметь экземпляр java.io.File, то самым быстрым способом является извлечение всего zip-файла (или частей, которые вы хотите) на диск, а затем используйте File from then on.

Но, вполне возможно, что вы хотите сделать, не нужно использовать файл, и вместо этого он мог бы работать с InputStream. В этом случае вы можете просто предоставить ему экземпляр stream, который у вас есть. Это обеспечит лучшую производительность и позволит избежать работы с файловой системой (создавать файлы, использовать их, обязательно очищать и т. Д.).

0

Вам необходимо создать объект ZipFile для повторения его записей. Try:

ZipFile zipFile = new ZipFile(zfc.getSelectedFile()); 

..., а затем продолжить на примере вы связаны между собой.