Diskuze: Problém se čtením souboru

Java Java Problém se čtením souboru

Avatar
Hit
Člen
Avatar
Hit:

Zdravím, při programování aplikace, která překládá soubory s diakritikou na soubory bez diakritiky jsem narazil na problém při načítání souboru. Pokud ve whilu dám podmínku while(br.readLine() != null), aplikace nevyhodí žádnou chybu, ale pokud se podívám do konzole, je vidět, že Reader vynechává některé řádky.

Problém jsem vyřešil tím, že jsem si vytvořil nekonečný while a uvnitř jsem přes if kontroloval NULL a případně hodil break. Přesto ale nechápu proč moje první řešení nefunguje. Budu vážně rád, pokud mi to někdo osvětlí :).

Příkládám problémovou část kódu a odkaz na soubor, který jsem načítal: http://www78.zippyshare.com/…44/file.html

package CharTranslator;


import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/**
 * Testovací třída
 * @author Lukas
 */
public class Test {
    private int lineNumber;
    private FileReader fr;
    private BufferedReader br;


    public Test(){
        try {
            fr = new FileReader("D:\\test\\test.srt");
            br = new BufferedReader(fr);
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        }
    }


    public static void main(String[] args){
        Test t = new Test();
        t.readFile();
    }
    /**
     * Přečte soubor po řádcích a řádky přeloží.
     */
    public void readFile(){
      //  System.out.println("Velikost kolekce: " + steamIDs.size());
        lineNumber = 0;
        try {
            while (true){
            //while (br.readLine() != null){
                lineNumber++;
                line = br.readLine();
                if ( line == null ){
                    break;
                }
                //translate(line);
                System.out.println(line);
           }

            br.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }


}
Editováno 19.10.2014 17:35
Odpovědět 19.10.2014 17:32
Life's not about how hard you can hit, it's about how hard you can GET hit and keep moving forward.
Avatar
Rasto
Redaktor
Avatar
Odpovídá na Hit
Rasto:

Ahoj,

nedavno som riesil podobnu situaciu.
Problem je v tom, ze do premennej line sa ti ulozi iba kazdy druhy riadok.
Totizto:
na tomto mieste:
while(br.readLine() != null) citas prvy riadok. Vyhodnoti sa podmienka a pointer sa automaticky posunie na dalsi riadok.

Potom na tomto mieste:
line = br.readLine(); citas druhy riadok a jeho obsah sa uklada do premennej line.

Nasledne sa cyklus opakuje pricom kazdym vyhodnotenim podmienky sa precita riadok a pointer sa posuva na dalsi. Vysledok je ze sa do line ulozi iba kazdy druhy riadok.

Skus podmienku while prerobit takto:
while (line = br.readLine() != null)

to druhe citanie (line = br.readLine()) by som vynechal uplne a v cykle nechal iba to ostatne co tam mas [translate(line), lineNumber++ a pod]

Neskusal som to, ale snad to bude fungovat.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 19.10.2014 18:47
Avatar
Hit
Člen
Avatar
Odpovídá na Rasto
Hit:

Funguje to, díky moc (v)

Nahoru Odpovědět 19.10.2014 19:21
Life's not about how hard you can hit, it's about how hard you can GET hit and keep moving forward.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.