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.
1 answer
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(); } }
|