- COMP.CS.140
- 7. Pakkaukset
- 7.4 ⌛⌛ Tekstihaku 7z-tiedostosta
⌛⌛ Tekstihaku 7z-tiedostosta¶
Tehtävän palautus koostuu Maven-projektista. Sijoita pom.xml
-tiedosto paikallisen tietovarastosi
round7/sevenzipsearch
-hakemistoon ja tee tähän hakemistoon src/main/java
-niminen alihakemisto.
Voit valita Java-luokkasi tai luokkiesi nimet vapaasti, mutta kunkin luokan pitää kuulua
fi.tuni.prog3.sevenzipsearch
-nimiseen pakkaukseen. Näin ollen tiedostojesi tulee olla hakemistossa
round7/sevenzipsearch/src/main/java/fi/tuni/prog3/sevenzipsearch
ja tiedostojen tulee alkaa
lauseella package fi.tuni.prog3.sevenzipsearch;
.
NetBeans osaa luoda tehtävässä
pom.xml
-tiedoston ja hakemistorakenteen automaattisesti, kun annat Maven-projektia luodessasi
oikeat tiedot. Näet alempana groupId
-, artifactId
- ja version
-elementeille annettavat arvot.
Materiaalien etätietovarastossa on saatavilla testiaineistoa (round7/sevenzipsearch
-hakemisto).
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:
Apache Commons Compress
Maven Centralin tietosivu: https://search.maven.org/artifact/org.apache.commons/commons-compress/1.21/jar
Dokumentaatiota: https://commons.apache.org/proper/commons-compress/examples.html
XZ
Maven Centralin tietosivu: https://search.maven.org/artifact/org.tukaani/xz/1.9/jar
Huom! Tämä on ainoastaan välillisesti tarvittava riippuvuus: Apache Commons Compress -kirjasto käyttää tätä sisäisesti. Oman koodisi ei tarvitse viitata tähän kirjastoon missään vaan riittää, että lisäät
pom.xml
-tiedostoon riippuvuusmäärityksen.
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 lukee 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) jarivi
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 projektitiedostoosi pom.xml
seuraavat määritykset:
groupId
-elementin arvo onfi.tuni.prog3
.artifactId
-elementin arvo onsevenzipsearch
.version
-elementin arvo on1.0
.Onejar-liitännäisen määritys, jonka
mainClass
-elementti viittaa ohjelmasi pääluokkaan, jonka saat tässä tehtävässä nimetä vapaasti. Jos pääluokkasi on nimeltään esimerkiksiSevenZipSearch
, on elementin arvofi.tuni.prog3.sevenzipsearch.SevenZipSearch
.
Vinkki: Heikki Hyyrön koodausdemovideo luvussa 7.2.
Toteutuksen testaus¶
Voit testata ohjelmaasi testiaineistojen java.7z
ja Dracula.7z
sekä mallitulostetiedostojen
output1.txt
, output2.txt
ja output3.txt
avulla. Ohjelmasi löytää testitiedostot helpoiten,
kun ne ovat alkuperäisessä paikassaan round7/sevenzipsearch
-hakemistossa.
Tehtävää tehdessäsi kannattaa mahdollisesti tutkia 7z-tiedostojen java.7z
ja Dracula.7z
sisältöä. Monet käyttöjärjestelmät, esimerkiksi 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 komennoilla:
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
projektin juurihakemistossa
sevenzipsearch
. Näiden kolmen testin odotetut tulosteet on kuvattu tiedostoissa output1.txt
,
output2.txt
ja output3.txt
.
A+ esittää tässä kohdassa tehtävän palautuslomakkeen.