1

我有一个程序,它从文件中读取内容并将其打印在屏幕上。但是程序每隔一行打印一次,即跳过每隔一行。包输入输出;

import java.io.*;

public class CharacterFileReaderAndFileWriter{

    private BufferedReader br = null;

    private PrintWriter pw = new PrintWriter(System.out, true);


    /* Read from file and print to console */
    public void readFromFile() throws IOException{

        try{
            br = new BufferedReader(new FileReader("E:\\Programming\\Class files\\practice\\src\\InputOutput\\test.txt"));
        }
        catch(FileNotFoundException ex){
            ex.printStackTrace();
        }

        String s = null;
        do{
            s = br.readLine();
            pw.println(s);
        }
        while((s = br.readLine())!=null);

        br.close();
    }

    /* Main method */
    public static void main(String[] args) throws IOException{

        CharacterFileReaderAndFileWriter cfr = new CharacterFileReaderAndFileWriter();

        cfr.readFromFile();
    }

}
4

7 回答 7

6

你为什么要做s=br.readline()两次..你可以这样。

String s = null;
 while((s = br.readLine())!=null)
{
   pw.println(s);
}

readline()每次调用时都会读取一行,然后转到下一行。所以当你调用它两次时,显然你正在跳过一行。使用此代码,它将起作用。

于 2012-04-22T02:53:36.117 回答
1

你循环是错误的:

String s = null;
do{
    s = br.readLine();
    pw.println(s);
}
while((s = br.readLine())!=null);

应该:

String s = null;
while((s = br.readLine())!=null) {
    pw.println(s);
};
于 2012-04-22T02:53:56.367 回答
1

反转do/while循环以避免调用readline两次并丢弃所有其他结果:

String s = null;
while((s = br.readLine())!=null) {
    pw.println(s);
}
于 2012-04-22T02:54:11.187 回答
0

删除do循环的第一行。您正在调用 readLine() 两次。

IE:

String s = null;
while((s = br.readLine())!=null) {
    pw.println(s);
}
于 2012-04-22T02:52:24.607 回答
0

如果您想使用 do-while,则需要修改您的 do-while 循环,然后请按如下方式对其进行编码。

String s = null;
do{        
    pw.println(s);
}
while((s = br.readLine())!=null);

br.close();
于 2012-04-22T02:56:11.670 回答
0

通过以下方式更改:

  for(String s; (s = br.readLine()) != null;) {
        pw.println(s);
  }
于 2012-04-22T03:01:00.627 回答
0

您正在使用 br.readLine() 两次。

String s = null;
    do{
        s = br.readLine();  //here it read first line 
        pw.println(s);      //here it prints first line    
    }
    while((s = br.readLine())!=null); //here s read second line
                                      //note that it is not printing that line

String s = null;
    do{
        s = br.readLine();  //this time it read third line
        pw.println(s);      //now it prints third line
    }
    while((s = br.readLine())!=null);   // this time it reads fourth line 

所以,这个过程会继续下去,你的程序会一个接一个地打印行

于 2013-07-03T04:40:57.997 回答