Miten javalla voi katsoa hasnext metodilla, että onko--> BufferedReader reader null vai ei? Siis jos on null niin suoritus loppuu ja tulostaa vaikka jotain
Mod. laittoi oikeaa ongelmaa kuvaavan otsikon, ks. myöhempi keskustelu!
HasNext on Scannerin metodi (dokumentaation mukaan, en javaa kirjoittele joten päättelin lukemastani). jos haluat käyttää BufferedReaderia tiedoston lukuun, tee se jotenkin seuraavasti:
FileReader fileReader = new FileReader(new File("test.txt")); BufferedReader br = new BufferedReader(fileReader); String line = null; // if no more lines the readLine() returns null while ((line = br.readLine()) != null) { // reading lines until the end of the file System.out.println(line); }
Ongelma tässä on se, että jos reader on null niin ohjelman kontrooli/suoritus keskeytyy. Toisin sanoen minun pitää saada niin, että jos reader on null->tehdään jotain ja muutoin tulostaa line mikä onkin jo tuossa.
Jos reader on null ja laitan if lauseen niin suoritus ei pääse sinne asti?
BufferedReader reader; try (OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream())) { writer.write("xxxxxxxx"); writer.flush(); reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line; while ((line = reader.readLine()) != null) { System.out.println(line); }
Ei ole mahdollista, että koodissasi reader olisi null sijoitusrivin jälkeen, koska new-operaattori palauttaa aina varmasti olion (ellei heitä poikkeusta). Eli selvitäpä uudestaan, mikä on ongelma tai millainen virheilmoitus tulee.
Jos kuitenkin haluat jossain tuollaisen tarkistaa, siihen sopii oikein hyvin if-lause:
if (reader == null) { System.out.println("reader == null!"); return; // System.exit(1), throw, mitä vain. }
Eli minulla on koodinpätkä, joka parsiin responsen serveriltä. Nyt pitää valioida niin, että mikä on jotain mitä parsia niin tulostetaan sisältö. Mikäli parsittavaa ei ole niin tulostetaan vaikka jotain?
Mikä on tilanne, missä response voi olla null? Palvelin palauttaa aina jotain.
Ei palvelin aina palauta jotain. Voihan se vaikka seota kesken pyynnön käsittelyn. Ja sen lisäksi että palvelimella voi olla vikatilanne, voi verkossa olla ongelma, niin että vastaus ei tule perille asti.
Yleisesti ottaen näissä tilanteissa Javassa toki tulee poikkeus...
Toisin sanoen ohjelma pollaa 30 sec ja ellei responsea tule niin tulostaa vaikka morjens. Muuten ohjelma jää pollaamaan ikuisiksi ajoiksi :)?
Toivomasi ratkaisu ei liity BufferedReaderiin mitenkään. Voit laittaa nettisivun lataukselle aikakatkaisun (URLConnection-luokan setConnectTimeout ja setReadTimeout), jolloin aikarajan täyttyessä saat SocketTimeoutException-poikkeuksen, jonka voit ottaa kiinni normaaliin tapaan catch-lohkolla.
try { // URL -> aikarajat, yhdistäminen, lukeminen jne. } catch (SocketTimeoutException e) { System.out.println("Aikaraja ylittyi!"); }
Jos on tilanne, jossa yhteys ja lukeminen ”onnistuvat” mutta dataa ei tule, voit lisätä itse lukusilmukkaan vaikka int-muuttujan, jolla lasket luetut rivit, ja silmukan jälkeen voit tarkastaa, jäikö muuttuja nollaan.
thx
Aihe on jo aika vanha, joten et voi enää vastata siihen.