This commit is contained in:
Alexander 2023-01-31 17:17:02 +03:00
parent 581bc98f75
commit 703d2d5a52
2 changed files with 265 additions and 0 deletions

103
jarunpacker.lpi Normal file
View File

@ -0,0 +1,103 @@
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<ProjectOptions>
<Version Value="12"/>
<PathDelim Value="\"/>
<General>
<Flags>
<MainUnitHasCreateFormStatements Value="False"/>
<MainUnitHasTitleStatement Value="False"/>
<MainUnitHasScaledStatement Value="False"/>
<CompatibilityMode Value="True"/>
</Flags>
<SessionStorage Value="InProjectDir"/>
<Title Value="jarunpacker"/>
<UseAppBundle Value="False"/>
<ResourceType Value="res"/>
</General>
<i18n>
<EnableI18N LFM="False"/>
</i18n>
<VersionInfo>
<UseVersionInfo Value="True"/>
<AutoIncrementBuild Value="True"/>
<MajorVersionNr Value="2023"/>
<MinorVersionNr Value="1"/>
<RevisionNr Value="31"/>
<Language Value="0419"/>
<StringTable Comments="fwZIP создан Rouse_" CompanyName="Александр Бабаев" FileDescription="JAR UnPacker ZIP Tool" InternalName="jarunpacker" LegalCopyright="Александр Бабаев" LegalTrademarks="Александр Бабаев" OriginalFilename="jarunpacker" ProductName="Jar Unpacker" ProductVersion="2023.01.31"/>
</VersionInfo>
<BuildModes Count="1">
<Item1 Name="Win32" Default="True"/>
</BuildModes>
<PublishOptions>
<Version Value="2"/>
</PublishOptions>
<RunParams>
<FormatVersion Value="2"/>
<Modes Count="1">
<Mode0 Name="default"/>
</Modes>
</RunParams>
<RequiredPackages Count="2">
<Item1>
<PackageName Value="ANBSTCP"/>
</Item1>
<Item2>
<PackageName Value="fwzip"/>
</Item2>
</RequiredPackages>
<Units Count="1">
<Unit0>
<Filename Value="jarunpacker.lpr"/>
<IsPartOfProject Value="True"/>
</Unit0>
</Units>
</ProjectOptions>
<CompilerOptions>
<Version Value="11"/>
<PathDelim Value="\"/>
<Target>
<Filename Value=".\output\jarunpacker"/>
</Target>
<SearchPaths>
<IncludeFiles Value="$(ProjOutDir)"/>
<UnitOutputDirectory Value="data\lib"/>
</SearchPaths>
<Parsing>
<SyntaxOptions>
<SyntaxMode Value="Delphi"/>
</SyntaxOptions>
</Parsing>
<CodeGeneration>
<SmartLinkUnit Value="True"/>
<TargetCPU Value="i386"/>
<TargetOS Value="win32"/>
<Optimizations>
<OptimizationLevel Value="3"/>
</Optimizations>
<SmallerCode Value="True"/>
</CodeGeneration>
<Linking>
<Debugging>
<DebugInfoType Value="dsDwarf3"/>
<StripSymbols Value="True"/>
<UseExternalDbgSyms Value="True"/>
</Debugging>
<LinkSmart Value="True"/>
</Linking>
</CompilerOptions>
<Debugging>
<Exceptions Count="3">
<Item1>
<Name Value="EAbort"/>
</Item1>
<Item2>
<Name Value="ECodetoolError"/>
</Item2>
<Item3>
<Name Value="EFOpenError"/>
</Item3>
</Exceptions>
</Debugging>
</CONFIG>

162
jarunpacker.lpr Normal file
View File

@ -0,0 +1,162 @@
program jarunpacker;
{$mode delphi}
{$codepage UTF8}
uses
Interfaces,
Classes,
Windows,
FWZipReader,
SysUtils,
ParamsMngr,
LazUTF8Classes,
FWZipConsts,
FWZipWriter,
FWZipZLib,
SimplyJSON,
LazFileUtils,
ANBFormatString;
{$R *.res}
resourcestring
msg_consoletitle = 'JAR Unpacker Tool';
msg_noparametrsfound = #13#10 + '[ОШИБКА] Параметры не заданы!';
msg_extractingfile = 'Извлекаю файл: %s';
msg_buildingfile = 'Сжимаю файл: %s';
procedure ExtractJAR(const JARName, TargetDir, ListFileName: string);
var
Reader: TFWZipReader;
zItem: TFWZipReaderItem;
FS: TFileStreamUTF8;
FL: TStringList;
Indx: integer;
begin
FS := TFileStreamUTF8.Create(JARName, fmOpenRead + fmShareExclusive);
FL := TStringList.Create;
Reader := TFWZipReader.Create;
try
Reader.LoadFromStream(FS);
for Indx := 0 to Reader.Count - 1 do
begin
zItem := Reader.Item[Indx];
FL.Add(FormatStr(zItem.FileName + '=' + zItem.FileName, ['/'], ['\']));
end;
Reader.ExtractAll(TargetDir);
finally
Reader.Free;
if Trim(ListFileName) <> '' then
FL.SaveToFile(ListFileName);
FreeAndNil(FL);
FS.Free;
end;
end;
procedure CompressJAR(const JARName, SourceDir, ListFileName: string);
var
Writer: TFWZipWriter;
FS: TFileStreamUTF8;
FL: TStringList;
begin
if FileExistsUTF8(JARName) then
DeleteFileUTF8(JARName);
FS := TFileStreamUTF8.Create(JARName, fmCreate);
FL := TStringList.Create;
FL.LoadFromFile(ListFileName);
SetCurrentDir(SourceDir);
Writer := TFWZipWriter.Create(clMax);
try
Writer.AddFilesAndFolders(FL, True);
Writer.BuildZip(FS);
finally
Writer.Free;
FreeAndNil(FL);
FS.Free;
end;
end;
procedure WriteHelpExtract();
begin
WriteLn('Допустимые параметры команды extract:');
WriteLn(' target - папка извлечения;');
WriteLn(' listFile - имя файла для списка распакованных файлов.');
WriteLn('');
WriteLn('Пример:');
WriteLn('/extract="d:\file.jar" /target="d:\toextract\" /listFile="d:\1.txt"');
end;
procedure WriteHelpCompress();
begin
WriteLn('Допустимые параметры команды compress:');
WriteLn(' from - папка с файлами для архива;');
WriteLn(' filesList - имя файла со списком файлов для упаковки.');
WriteLn('');
WriteLn('Пример:');
WriteLn('/compress="d:\file.jar" /from="d:\toextract\" /filesList="d:\1.txt"');
end;
procedure WriteHelp();
begin
WriteLn('Допустимые параметры:');
WriteLn(' extract - извлечение jar-архива;');
WriteLn(' compres - сжатие jar-ахива.');
WriteLn('');
WriteHelpExtract;
WriteLn('');
WriteHelpCompress();
WriteLn(msg_noparametrsfound);
end;
var
isHandled: boolean;
JARName, TargetDir, ListFileName: string;
begin
SetConsoleTitle(PChar(msg_consoletitle));
WriteLn('--------------------------------------------------------------------');
WriteLn('****************Утилита упаковки/распаковки JAR файлов**************');
WriteLn('*************************Версия: 2023.01.31*************************');
WriteLn('**********Авторские права (c) 2016 - 2023, Александр Бабаев*********');
WriteLn('--------------------------------------------------------------------');
isHandled := False;
if HasParam('extract') then
begin
if not (HasParam('target') and HasParam('listFile')) then
begin
WriteHelpExtract();
ReadLn;
isHandled := True;
end
else
begin
JARName := GetParamValue('extract');
TargetDir := IncludeTrailingBackslash(GetParamValue('target'));
ListFileName := GetParamValue('listFile');
ExtractJAR(JARName, TargetDir, ListFileName);
WriteLn(Format(msg_extractingfile, [JARName]));
isHandled := True;
end;
end;
if HasParam('compress') then
begin
if not (HasParam('from') and HasParam('filesList')) then
begin
WriteHelpExtract();
ReadLn;
isHandled := True;
end
else
begin
JARName := GetParamValue('compress');
TargetDir := GetParamValue('from');
ListFileName := GetParamValue('filesList');
CompressJAR(JARName, TargetDir, ListFileName);
WriteLn(Format(msg_buildingfile, [JARName]));
isHandled := True;
end;
end;
if not isHandled then
begin
WriteHelp();
ReadLn;
end;
end.