There was a need to unpack the .phar archive using Java. On the Internet, the answer to this question is not found. Please recommend any libraries (if any, of course), or other ways of doing this.

  • Do not let the expansion confuse you, this is the usual zip-archive - etki
  • phar is a tar or bzip archive and work with it - Naumov

1 answer 1

Do not let the expansion confuse you, this is a regular zip-archive - Etki 2 days ago

I did not find the file with the extension .phar, (VERY PLEASANT :() so I could not try the code, but checked it on .zip and even on .docx .... -> rename your file.phar to fil.zip and everything will be OK

import java.io.*; import java.util.*; import java.util.zip.*; /** * Π”Π°Π½Π½Ρ‹ΠΉ класс прСдоставляСт ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для распаковки Π°Ρ€Ρ…ΠΈΠ²Π° ZIP * @author Germes * @version 0.1.a */ public class Unpacking { /** * Π”Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ осущСствляСт распаковку Π°Ρ€Ρ…ΠΈΠ²Π° ZIP * @param name_File_Zip Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘Ρ‚ имя ΠΈΠ»ΠΈ ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ Π°Ρ€Ρ…ΠΈΠ²Π° ZIP */ public static void unZip(String name_File_Zip) { // ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» Π°Ρ€Ρ…ΠΈΠ²Π° ZIP File openFileZip = new File(name_File_Zip); // пСрСмСнная ΠΏΠΎΡ‚ΠΎΠΊΠ° чтСния Zip ZipFile openZip; // ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΏΠ°ΠΏΠΊΡƒ для распаковки String name_folder_unpacking = name_File_Zip.replaceAll(".zip", ""); // Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ ΠΏΠ°ΠΏΠΊΡƒ для распаковки if(new File(name_folder_unpacking).mkdir()) System.out.println(" Π€ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΏΠΊΠΈ для распаковки Π°Ρ€Ρ…ΠΈΠ²: " + name_folder_unpacking); try { openZip = new ZipFile(openFileZip); Enumeration<? extends ZipEntry> elementZIP = openZip.entries(); ZipEntry elementBuffer; while(elementZIP.hasMoreElements()) { elementBuffer = elementZIP.nextElement(); // Ссли элСмСнт массива Ρ€Π°Π²Π΅Π½ NULL if(elementBuffer == null) break; // Ссли элСмСнт массива ΠΏΠ°ΠΏΠΊΠ° else if(elementBuffer.isDirectory()) { if(new File(name_folder_unpacking + "/" + elementBuffer.getName()).mkdir()) System.out.println(" Боздаётся ΠΏΠ°ΠΏΠΊΠ° : " + name_folder_unpacking + "/" + elementBuffer.getName()); } // элСмСнт Π°Ρ€Ρ…ΠΈΠ²Π° удовлСтворяСт всСм условиям else { StringTokenizer token = new StringTokenizer(name_folder_unpacking + "/" + elementBuffer.getName(), "/"); String bufferString = token.nextToken(); while (true) { if (!token.hasMoreElements()) { // ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊ чтСния InputStream readElement = openZip.getInputStream(elementBuffer); // ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊ записи FileOutputStream writeElement = new FileOutputStream(bufferString); // записываСм распакованный элСмСнт Π² ΠΏΠ°ΠΏΠΊΡƒ write_Element_Zip(readElement, writeElement); break; } // ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° нСстандартных ситуаций else { if(new File(bufferString).mkdir()) System.out.println(" Боздаётся ΠΏΠ°ΠΏΠΊΠ° : " + bufferString); bufferString = bufferString.concat("/" + token.nextElement()); System.out.println(" Распаковка : " + bufferString); } } } } // Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° чтСния ZIP openZip.close(); } catch(ZipException eZIP) { System.out.println("Π€ΠΎΡ€ΠΌΠ°Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π½Π΅ ZIP"); } catch(IOException eIO) { System.out.println("ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ZIP " + eIO ); } catch(NullPointerException eNUL) { System.out.println("ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ элСмСнт Π² ZIP"); } } //ΠœΠ΅Ρ‚ΠΎΠ΄ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ запись ΠΏΠΎΡ‚ΠΎΠΊΠ° Π²Π²ΠΎΠ΄Π° Π² ΠΏΠΎΡ‚ΠΎΠΊ Π²Ρ‹Π²ΠΎΠ΄Π° private static void write_Element_Zip(InputStream in, OutputStream out) throws IOException { int bufferByte = in.read(); while(bufferByte != -1) { out.write(bufferByte); bufferByte = in.read(); } //Π—Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° in.close(); out.close(); } }