2016-02-12 94 views
1

我的問題是下一個: 1.我應該回來40行,但我只得到20. 2.最大的問題是,我得到所有行回NULL。這是爲什麼?文件閱讀有什麼問題?Java文件讀取和字符串分割問題

在此先感謝!

public class Program{ 
public static void main(String[] args) throws FileNotFoundException, IOException { 

    String[] egysor = new String[5]; 
     String line; 
    FileReader fr = new FileReader("szavazatok.txt"); 
    BufferedReader br = new BufferedReader(fr); 
    int n=0; 
    Sor[] sorok = new Sor[100]; 

    while(br.readLine()!=null){ 
     sorok[n] = new Sor(); 
     egysor = br.readLine().split(" "); 

     sorok[n].setKorzet(egysor[0]); 
     sorok[n].setSzavazat(Integer.parseInt(egysor[1])); 
     sorok[n].setVezNev(egysor[2]); 
     sorok[n].setUtoNev(egysor[3]); 
     sorok[n].setPart(egysor[4]); 
     n++; 
     System.out.println(sorok[n]); 
    } 
    System.out.println(n); 

和我的課:

public class Sor { 
private String korzet, vezNev, utoNev, part; 
private int szavazat;` 

public String getKorzet() { 
    return korzet; 
} 

public void setKorzet(String korzet) { 
    this.korzet = korzet; 
} 

public String getVezNev() { 
    return vezNev; 
} 

public void setVezNev(String vezNev) { 
    this.vezNev = vezNev; 
} 

public String getUtoNev() { 
    return utoNev; 
} 

public void setUtoNev(String utoNev) { 
    this.utoNev = utoNev; 
} 

public String getPart() { 
    return part; 
} 

public void setPart(String part) { 
    this.part = part; 
} 

public int getSzavazat() { 
    return szavazat; 
} 

public void setSzavazat(int szavazat) { 
    this.szavazat = szavazat; 
} 


public Sor(){ 
    this.korzet = korzet; 
    this.vezNev = vezNev; 
    this.utoNev = utoNev; 
    this.part = part; 
    this.szavazat = szavazat; 
} 

public String toString(){ 
    return "korzet"+korzet; 
} 

回答

1

while循環是吃了一半的線。

while(br.readLine()!=null) 

環路測試條件將讀取一行。你基本上扔掉這些數據。 然後在循環中讀取下一行並實際處理它。 你需要做的是這個。

String inputLine = br.readLine(); 
while (inputLine != null){ 
    //...your logic. 
    inputLine=br.readLine(); 
} 
0

調用BufferedReader.readline()將消耗和返回剛讀線。

BufferedReader.readLine()

讀取一行文本。一行被認爲是由一個>換行符('\ n'),一個回車符('\ r')或一個回車符>立即由換行符中的任何一個終止。

返回: 包含行的內容,不包括任何設備 - >終止的字符,或NULL,如果流的末尾已到達

嘗試這個字符串:

String line; 

while((line = br.readLine()) != null) { 
    sorok[n] = new Sor(); 
    egysor = line.split(" "); 

    sorok[n].setKorzet(egysor[0]); 
    sorok[n].setSzavazat(Integer.parseInt(egysor[1])); 
    sorok[n].setVezNev(egysor[2]); 
    sorok[n].setUtoNev(egysor[3]); 
    sorok[n].setPart(egysor[4]); 
    n++; 
    System.out.println(sorok[n]); 
} 
+0

謝謝我現在回來40,但所有的行都是NULL :(爲什麼? – Viktor