Java-tiedoston lukeminen

Yleiskatsaus

Tässä opetusohjelmassa tutkitaan erilaisia tapoja lukea Java-tiedostosta .

Ensinnäkin opimme lataamaan tiedoston luokan polulta, URL-osoitteesta tai JAR-tiedostosta tavallisilla Java-luokilla.

Toiseksi näemme, kuinka lukea sisältöä BufferedReader, Scanner, StreamTokenizer, DataInputStream, SequenceInputStream ja FileChannel avulla. Keskustelemme myös UTF-8-koodatun tiedoston lukemisesta.

Lopuksi tutkitaan ladattavia uusia tekniikoita. ja lukea tiedosto Java 7: ssä ja Java 8: ssa.

Tämä artikkeli on osa Baeldungin ”Java – Takaisin perusasetuksiin” -sarjaa.

Lisätietoja:

Java – Luo tiedosto

Kuinka luoda tiedosto Java-tiedostoon käyttämällä JDK 6: ta, JDK 7: ää NIO: lla tai Commons IO: lla.
Lue lisää →

Java – kirjoita tiedostoon

Monia tapoja kirjoittaa tietoja tiedostoon Java-sovelluksella.
Lue lisää →

Asetukset

2.1 Syötetiedosto

Useimmissa tämän artikkelin esimerkeissä luemme tekstitiedoston, jonka tiedostonimi fileTest.txt sisältää yhden rivin:

Muutamia esimerkkejä varten käytämme eri tiedostoa; näissä tapauksissa mainitsemme tiedoston ja sen sisällön nimenomaisesti.

2.2 Helper Method

Käytämme joukkoa testiesimerkkejä ytimen kanssa Vain Java-luokat, ja testeissä käytämme väitteitä Hamcrest-hakijoiden kanssa.

Testit jakavat yhteisen readFromInputStream-menetelmän, joka muuntaa InputStreamin merkkijonoksi tulosten vahvistamisen helpottamiseksi:

Huomaa, että on olemassa muita tapoja saavuttaa sama tulos. Voimme lukea joitain vaihtoehtoja tästä artikkelista.

Tiedoston lukeminen luokkaradalta

3.1 . Tavallisen Java-sovelluksen käyttö

Tässä osassa kerrotaan, kuinka luetaan luokkatiedolla käytettävissä oleva tiedosto. Luemme ”tiedostoTest.txt”, joka on saatavana tiedostosta src / main / resources :

Edellä olevassa koodinpätkässä käytimme nykyistä luokkaa tiedoston lataamiseen getResourceAsStream-menetelmällä ja välitimme ladattavan tiedoston absoluuttisen polun.

Sama menetelmä on käytettävissä myös ClassLoader-ilmentymä:

Hankimme classLoa nykyisen luokan der käyttäen getClass (). getClassLoader ().

Tärkein ero on, että kun getResourceAsStreamia käytetään ClassLoader-ilmentymässä, polkua käsitellään absoluuttisena luokkapolun juuresta alkaen.

Kun sitä käytetään luokan ilmentymää vastaan, polku voi olla suhteessa pakettiin tai absoluuttinen polku, jonka vihjasi johtava kauttaviiva.

Huomaa tietysti, että käytännössä , avoimet virrat tulisi aina sulkea, kuten esimerkissämme oleva InputStream:

3.2. Commons-io-kirjaston käyttö

Toinen yleinen vaihtoehto on commons-io-paketin FileUtils-luokan käyttäminen:

Tässä välitämme File-objektin method readFileToString () FileUtils-luokassa. Tämä hyötyluokka onnistuu lataamaan sisällön tarvitsematta kirjoittaa kattilakoodia InputStream-ilmentymän luomiseksi ja tietojen lukemiseksi.

Sama kirjasto tarjoaa myös IOUtils-luokan:

Tässä me välittää FileInputStream-objekti IOUtils-luokan metodille toString (). Tämä apuohjelmaluokka toimii samalla tavalla kuin edellinen luodakseen InputStream-ilmentymän ja lukea tietoja.

Lukeminen BufferedReaderilla

Anna nyt ” Keskitymme eri tavoihin jäsentää tiedoston sisältöä.

Aloitamme yksinkertaisella tavalla lukea tiedostosta BufferedReader:

Huomaa, että readLine () palaa tyhjä, kun tiedoston loppu on saavutettu.

Lukeminen tiedostosta Java NIO: n avulla

JDK7: ssä NIO-paketti päivitettiin merkittävästi.

Katsotaanpa esimerkkiä Files-luokan ja readAllLines-menetelmän avulla. ReadAllLines-menetelmä hyväksyy polun.

Path-luokkaa voidaan pitää java.io.File-tiedoston päivityksenä, kun joitain lisätoimintoja on paikallaan.

5.1. Pienen tiedoston lukeminen

Seuraava koodi näyttää, kuinka pieni tiedosto luetaan uuden Files-luokan avulla:

Huomaa, että voimme käyttää readAllBytes () menetelmä, jos tarvitsemme binaaritietoja.

5.2. Suuren tiedoston lukeminen

Jos haluamme lukea suuren tiedoston Tiedostot-luokan kanssa, voimme käyttää BufferedReaderia.

Seuraava koodi lukee tiedoston käyttämällä uusi Files-luokka ja BufferedReader:

5.3. Tiedoston lukeminen käyttämällä Files.lines ()

JDK8 tarjoaa Linjat () -menetelmän Files-luokassa. Se palauttaa Stream of String -elementit.

Tarkastellaan esimerkkiä siitä, miten tiedot voidaan lukea tavuina ja purkaa ne käyttämällä UTF-8-merkistöä.

Seuraava koodi lukee tiedoston käyttämällä uusi Files.lines ():

Streamin käyttäminen IO-kanavien, kuten tiedostotoimintojen kanssa, meidän on suljettava virta nimenomaisesti käyttämällä close () -menetelmää.

Kuten näemme, Files-sovellusliittymä tarjoaa toisen helpon tavan lukea tiedoston sisältö merkkijonoksi.

Seuraavissa osioissa tarkastelemme muita harvinaisempia tapoja sellaisen tiedoston lukeminen, joka voi olla tarkoituksenmukaista joissakin tilanteissa.

Lukeminen skannerilla

Seuraavaksi käytetään skanneria lukemaan tiedostosta. Tässä käytämme välilyöntiä erottimena:

Huomaa, että oletuserotin on välilyönti, mutta skannerin kanssa voidaan käyttää useita erottimia.

Skanneri-luokka on hyödyllinen luettaessa sisältö konsolista tai kun sisältö sisältää alkeellisia arvoja, tunnetulla erottimella (esim. luettelo välilyönnillä erotetuista kokonaislukuista).

Lukeminen StreamTokenizerilla

Luketaan nyt tekstitiedosto tunnuksiksi StreamTokenizerin avulla.

Tunnistin toimii selvittämällä ensin mikä seuraava merkki on merkkijono tai numero. Teemme sen katsomalla tokenizer.ttype-kenttää.

Sitten luemme todellisen tunnuksen tämän tyypin perusteella:

  • tokenizer.nval – jos tyyppi oli numero
  • tokenizer.sval – jos tyyppi oli merkkijono

Tässä esimerkissä käytämme eri syötetiedostoa, joka sisältää yksinkertaisesti:

Seuraava koodi lukee tiedostosta sekä merkkijonon että numeron:

Huomaa, kuinka tiedoston tunnuksen loppua käytetään lopussa.

Tästä lähestymistavasta on hyötyä syötevirran jäsentämisessä tunnuksiksi.

Lukeminen DataInputStreamilla

Voimme käyttää DataInputStreamia binaaristen tai primitiiviset tietotyypit tiedostosta.

Seuraava testi lukee tiedoston DataInputStreamin avulla:

Lukeminen FileChannelilla

Jos luet suurta tiedostoa, FileChannel voi olla nopeampi kuin tavallinen IO.

Seuraava koodi lukee datatavut tiedostosta FileChannel- ja RandomAccessFile-tiedostoilla:

UTF-8-koodauksen lukeminen muokattu tiedosto

Katsotaan nyt, kuinka luetaan UTF-8-koodattu tiedosto BufferedReaderin avulla. Tässä esimerkissä luemme tiedoston, joka sisältää kiinalaisia merkkejä:

Sisällön lukeminen URL-osoitteesta

Sisällön lukemiseen URL-osoitteesta käytämme ”/” URL esimerkissämme:

On olemassa myös vaihtoehtoisia tapoja muodostaa yhteys URL-osoitteeseen. Tässä käytimme URL-osoitetta ja URLConnection-luokkaa, joka on saatavana tavallisessa SDK: ssa.

Tiedoston lukeminen JAR: sta

Voit lukea tiedoston, joka sijaitsee JAR-tiedosto, tarvitsemme JAR-tiedoston, jonka sisällä on tiedosto. Esimerkissä luemme ”LICENSE.txt” -tiedostosta ”hamcrest-library-1.3.jar”:

Täältä haluamme ladata LICENSE.txt-tiedoston, joka sijaitsee Hamcrest-kirjastossa, joten käytämme Matcher-luokka, joka auttaa saamaan resurssin. Sama tiedosto voidaan ladata myös classloaderilla.

Päätelmä

Kuten näemme, Tiedoston lataamiseen ja tietojen lukemiseen tavallisella Java-ohjelmalla on monia mahdollisuuksia.

Voimme ladata tiedoston eri sijainneista, kuten classpath-, URL- tai jar-tiedostoista.

Sitten voi käyttää BufferedReaderia lukemaan rivi riviltä, Skanneri lukemaan eri erottimilla, StreamTokenizer lukemaan tiedoston tunnuksiksi, DataInputStream lukemaan binääritietoja ja primitiivisiä tietotyyppejä, SequenceInput Stream linkittämään useita tiedostoja yhteen streamiin, FileChannel lukemaan nopeammin suurista tiedostot jne.

Write a Comment

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *