From f4371f769abd7a8d7013abf5b5cdd33fe00c0db4 Mon Sep 17 00:00:00 2001 From: lisitong <3312630472@qq.com> Date: Sat, 30 May 2026 10:49:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E8=87=B3?= =?UTF-8?q?=20'project'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- project/CLI.class | Bin 0 -> 3175 bytes project/CLI.java | 98 +++++++++++++++++++++++++++++++++++++ project/Command.class | Bin 0 -> 248 bytes project/Command.java | 9 ++++ project/CrawlCommand.class | Bin 0 -> 1619 bytes 5 files changed, 107 insertions(+) create mode 100644 project/CLI.class create mode 100644 project/CLI.java create mode 100644 project/Command.class create mode 100644 project/Command.java create mode 100644 project/CrawlCommand.class diff --git a/project/CLI.class b/project/CLI.class new file mode 100644 index 0000000000000000000000000000000000000000..d47df84b865f7cddb23cde8f31b507c8a64f3969 GIT binary patch literal 3175 zcma)8U2q#$75=XEvnzRBD~jDlZQ>>+X)MW#nkF%+6$FWsG+cUMm2 z*b|WE?z!jex#ymH&Uen;-`<>^2e21E38D@j1zrt4_ys~E`naCV>xEphcW}hW+5-MP zX2G=60-n}re*h{13W6Hyp$RD2yqWCm=@JNLt%6;$@_C~q(9(08OLms@XDIEw^*$wy z+@qlpAp!5WX*?qk?vZp!x1aNrg0R3E$DfLA=97o?@^D5k2C)VnX`xxey|_<6&01q) zdSR$6(AaZZovNuI)gl`1mnRF$QsAqR!yYp@oDT<@R)`U8R5n|-V+|iX(L;)4F!7y?ln$ljiPN@1&Npg zOH2?cq&0jNpCgEJhMh6WWj$xm?bg~DRGkQ7A37E6*Khy_3D-MOBcKhLvjNhqiol(MplA;vF}DBC67HgacFoRac!6~oMJA~9~12CcH8Vnm896?uA> zNLUq{pj1)d{)->ZE=;|)`13ax&%e9y>hm|wPc5ALP^PCS3*c#it*gXx6`U}-We}qk z4dY;KufJO}pwnf;?svT-yjzb)`&FC~c))e%uk)`jyfC|X`GbXDpRaMMjAu1`RYE}H z@?Pf@`^{3AP3`L%p2InT`^NN9mUxwfIt*0ZB@(OIJ46}FmH+5r=Ht1M_P*k@HrS>vE7cTrj3 z+hp@&QS7rUTY|EfG3;S$h(LXv&G^P!?=8Ol?&75hH>VvNMWY|*gLo4^RB%CN@S?zG zr++$q(kzTyqejxLD>tbJ^{j1`h?EPpu&gS&n;qh{kT=Skdn{|TQmpN=uAy4VvV}*^ z6ph-KRrT61ELCVt9;+rg*&6yx+hF#zu0nxVUtTYljk1Eb1h%X=(`v3N_%UzMyQ{JV zxaYzqw(&Y5--EEcmN^T{%hjR0A|Wurc^$q5FXujdo6i?0>E;R#X-jMdA{M^}CDwKg z4Y4__8JNM^YiNp1W8GD12z-Z6-lKdr(MmG{ynOGW?FiQKij2^@eCygB;U0pT2V=iL zQ}}^7Y#887nZbjnh8A7{4|1Ou z@lti)3-Vir8tt+8G#<^gT}ObX+XW`ECBsb{+NSZDY3!BLX*@oO#wBSFrB|I8hOm|$ z4~$-v@u_ppy^T=?uXaB+BZw`0*G8?aj6^Fvi1M;;<1@y89J`Rf%hcB34ee8qI;x<% zo_2W0^2w;z{gS5$Fr=TvuS1Q`UqWNek*C6$j3+HRyqDB_%Y7}U zu8{sC_u|J=|97M30&7X%k0{}z(>Qh!mptw2B;Fu@!r@=?N`8X;mmL1APx3bTuQ>dO zU-Cobb%#H$Nd5@aQKdpvtS1WIY$r;IV&Ebz;p!bLe7#k6pT6oB@}2^ zo7MN|=Q|wo$2c;s?$}EzN2WT)NaZ*yM-2w2YJfM@?DL+C&tH)_NDYL?BK{dzzll%y z1cRQL#1r1MM6P!lrAefhE1zDb+~Jjq5o(^DM3b}@@z3IGfU8A|lQ*|7CAw_}-=P5b@?OE?;v%}l6?BVt_$~4? z^okE~SX|{t$SjVE>o_LQmoapPB@D)_F#b#eeV z!3K3$&KsRyC=_aFudiF?1^*+EjQvR57VzmL~QRm$Gr_yI1F3vzZD JKf>FH{1;|ND(e6M literal 0 HcmV?d00001 diff --git a/project/CLI.java b/project/CLI.java new file mode 100644 index 0000000..83341bd --- /dev/null +++ b/project/CLI.java @@ -0,0 +1,98 @@ +package cli; + +import command.Command; +import command.CrawlCommand; +import command.HelpCommand; +import command.ListCommand; +import controller.CrawlerController; +import exception.CLIException; +import exception.CrawlerException; +import view.CrawlerView; + +import java.util.HashMap; +import java.util.Map; + +public class CLI { + private final CrawlerController controller; + private final CrawlerView view; + private final Map commands; + + public CLI(CrawlerController controller, CrawlerView view) { + this.controller = controller; + this.view = view; + this.commands = new HashMap<>(); + initializeCommands(); + } + + private void initializeCommands() { + commands.put("help", new HelpCommand(controller)); + commands.put("list", new ListCommand(controller)); + commands.put("crawl", new CrawlCommand(controller)); + } + + public void process(String[] args) { + try { + Command command = parseArgs(args); + if (command != null) { + command.execute(); + } + } catch (CLIException e) { + view.displayError(e.getMessage()); + view.displayHelp(); + } catch (CrawlerException e) { + view.displayError(e.getMessage()); + } + } + + private Command parseArgs(String[] args) throws CLIException { + if (args == null || args.length == 0) { + return new CrawlCommand(controller); + } + + String strategy = "all"; + boolean verbose = false; + String outputDir = null; + + for (int i = 0; i < args.length; i++) { + String arg = args[i]; + + switch (arg) { + case "-h": + case "--help": + return new HelpCommand(controller); + + case "-l": + case "--list": + return new ListCommand(controller); + + case "-s": + case "--strategy": + if (i + 1 >= args.length) { + throw new CLIException("缺少策略参数值", arg); + } + strategy = args[++i]; + break; + + case "-v": + case "--verbose": + verbose = true; + controller.setVerbose(true); + break; + + case "-o": + case "--output": + if (i + 1 >= args.length) { + throw new CLIException("缺少输出目录参数值", arg); + } + outputDir = args[++i]; + controller.setOutputDir(outputDir); + break; + + default: + throw new CLIException("未知的参数: " + arg, arg); + } + } + + return new CrawlCommand(controller, strategy); + } +} \ No newline at end of file diff --git a/project/Command.class b/project/Command.class new file mode 100644 index 0000000000000000000000000000000000000000..7f806b8f2f077c804d2ff5fbea42c400c4c07757 GIT binary patch literal 248 zcmYL^I}XA?3`A#>!19NJiW88A9DoW1s1Ov9=$FNcg7QJj1~?l92jEZ$^KU#F%WpKk z-7i-F6LcjUfvzsHOy%1ke5-^f(A%k_3R0EF!D_Q3Z3QHqNtc!c+@Ze~Xw1%<_BJW< zgG60mKwlq(Mx9bJzXOJ2vP+dQ+#mXje|Tg~lE-6#4j)YEpiT0M~3Nsr=XQ)X3ut4LU==?bmADTPl_V{+(Nne;B&XIG!WVG91rUY~PcC@46z0K_Vz` zN=lWR{5CJT+^ZJnW#D+#QhvdJfgTN}GSSPhtqHljcvIMth~)AM-9#j7VjKDxjHV5S zp$}VB@3x!h#{h#F%79BzU76!G!C)RLiEJ}I7#5fKz z?5Oc&LHV+|yynOobP6T+WXN#f|E;yA(*i?5Ly-t?mdZwzjC`ax@(T{@%l@D|N92{CW#MZpu z_ykt-p+&}lj2cVmCgT}0PXiFW^iY|+LOY{<)MACdU_Hg)1N71<^AvkmNiCgX`N%b; zG!?Oll@1V>LHc%LAI+i9>9zx@!5(}Oofy6(#V2tpVY-KQWhia!|C6@Zt*%HkMC<8I z;AFyRSlP8$#7MV3TZO3vYsdp@I0PsyF`Zb;XhcCns&87O`Its20-V8Dv}Xu