⌛⌛ Tekstihaku 7z-tiedostosta

Palautus koostuu Maven-projektista. Aseta vastauksesi tiedostoon pom.xml sekä valitsemasi nimisiin Java-tiedostoihin alihakemistossa src. Sekä tiedoston pom.xml että alihakemiston src tulee puolestaan sijaita hakemistossa Round7/sevenzipsearch. Muista hakea materiaalit ``student_template_project``sta.

Tässä tehtävässä kokeillaan 7z-pakkausformaatilla pakatun tiedoston käsittelyä Apache Commons Compress -kirjastolla. Tehtävässä tarvitaan tarkemmin ottaen seuraavat kaksi kirjastoa:

7z-tiedostot (Wikipedia-artikkeli) ovat sinänsä samantapaisia kuin zip-tiedostot, mutta ne käyttävät tehokkaampaa pakkausalgoritmia.

Tehtävänäsi on toteuttaa ohjelma, joka etsii annetun hakusanan esiintymiä annetun 7z-tiedoston sisältämistä tekstitiedostoista. Ohjelman tulee toimia tarkemmin ottaen seuraavasti:

  • Ohjelma ottaa kaksi komentoriviparametria: tiedoston nimen ja hakusanan.

  • Ohjelma olettaa, että ensimmäinen komentoriviparametri vastaa 7z-tiedostoa. Ohjelma selaa kyseisen 7z-tiedoston sisältämät tiedostot läpi ja suorittaa hakusanahaun kussakin löytämässään tekstitiedostossa.

    • Tiedosto päätellään tekstitiedostoksi sen nimen päätteen perusteella: haku suoritetaan jos ja vain jos tiedoston nimen loppu on “.txt”.

    • Kunkin haun alussa tulostetaan aina tiedoston nimi ruudulle.

    • Kunkin haun lopuksi tulostetaan aina yksi ylimääräinen rivinvaihto.

  • Sanahaun suorittaminen:

    • Tiedostoa luetaan rivi kerrallaan, ja kultakin riviltä etsitään kaikki hakusanan esiintymät kirjainkoosta riippumatta.

    • Jos yksikin esiintymä löytyy, kyseinen rivi tulostetaan ruudulle muodossa “rivinumero: rivi”, missä rivinumero on kyseisen rivin rivinumero (tiedoston ensimmäisen rivin numero on 1) ja rivi on kyseinen rivi esitettynä sellaisessa muodossa, että kaikki hakusanan esiintymät on muunnettu käyttämään isoja kirjaimia.

Annetut mallitulosteet selventävät tulosteen muotoa.

Automaattiset (sekä alla kuvatut) testit olettavat, että teet projektiedostoosi pom.xml seuraavat määritykset:

  • artifactId-elementin arvo on sevenzipsearch.

  • version-elementin arvo on 1.0.

  • onejar-liitännäisen määritys, jonka mainClass-elementti viittaa ohjelmasi pääluokkaan (minkä saat tässä tehtävässä sinänsä nimetä vapaasti).

Toteutuksen testaus

Voit testata ohjelmaasi testiaineistojen java.7z ja Dracula.7z sekä mallitulostetiedostojen output1.txt, output2.txt ja output3.txt avulla.

Tehtävää tehdessäsi kannattaa mahdollisesti tutkia 7z-tiedostojen java.7z ja Dracula.7z sisältöä. Monet käyttöjärjestelmät (esim. Ubuntu Linux) osaavat avata 7z-tiedostoja ilman erillistä ohjelmaa. Muussa tapauksessa voit käyttää jotain 7z-formaattia tukevaa pakkausohjelmaa. Varsin luonteva valinta lienee 7-zip (https://www.7-zip.org/), joka on valmiiksi asennettu yliopiston tietokoneille.

Käännä ohjelmasi tapaan mvn package ja suorita testit tapaan java -jar target/sevenzipsearch-1.0.one-jar.jar java.7z oracle, java -jar target/sevenzipsearch-1.0.one-jar.jar Dracula.7z under ja java -jar target/sevenzipsearch-1.0.one-jar.jar Dracula.7z press. Näiden kolmen suorituksen odotetut tulosteet on kuvattu tiedostoissa output1.txt, output2.txt ja output3.txt.

A+ esittää tässä kohdassa tehtävän palautuslomakkeen.