读取文件内容时出现意外输出

时间:2015-06-10 05:58:34

标签: java

我在阅读文件内容时遇到了一些问题 虽然程序正在读取内容,但它正在从文件中跳过奇数行数据。

文件示例:

Czech Republic____06092015_091108   
France____06092015_060256   
Greece____06092015_073528   
Hungary____06092015_093424  
India____06092015_120741    
Indonesia____06092015_140940    
Kazakhstan____06092015_095945   
Mexico____06092015_061522   
Turkey____06092015_100457

但输出结果为:

java.io.DataInputStream@1909752

France____06092015_060256

Hungary____06092015_093424

Indonesia____06092015_140940

Mexico____06092015_061522

我不明白为什么它会以这种格式提供输出。
我在输入文件中有行分隔符,是否会导致问题?

public class tst {
    // Main method
    public static void main(String args[]) {
        // Stream to read file
        FileInputStream fin;
        int k = 0;
        try {
            // Open an input stream
            fin = new FileInputStream(
                    "C:/Users/BOT2/Desktop/MC_WIth_DATA_Files.txt");
            DataInputStream in1 = new DataInputStream(fin);
            // Read a line of text
            System.out.println(new DataInputStream(fin));

            // Close our input stream
            BufferedReader br1 = new BufferedReader(new InputStreamReader(in1));

            while (br1.readLine() != null) {// System.out.println(k);k++;
                System.out.println(br1.readLine());
            }
            br1.close();
            fin.close();
        }
        // Catches any error conditions
        catch (IOException e) {
            System.err.println("Unable to read from file");
            System.exit(-1);
        }
    }
}

4 个答案:

答案 0 :(得分:3)

第一行由:

打印
System.out.println( new DataInputStream(fin) );

它为您提供new DataInputStream(fin).toString()

的结果

下一行以这种格式打印,因为每个循环读取两行: 第一行while (br1.readLine() != null){和第二行:System.out.println(br1.readLine()); }

因此您必须将代码更改为:

String line;
while ((line =br1.readLine()) != null){//System.out.println(k);k++;
   System.out.println(line );
}
br1.close();
fin.close();        

答案 1 :(得分:3)

您有两个错误。首先,出于某种原因打印出dataStream对象。摆脱:

 // Read a line of text
 System.out.println( new DataInputStream(fin) );

接下来,你扔掉了一行文字。试试这个:

   String line;
   while ((line = br1.readLine()) != null){
     System.out.println(line); 
   }

答案 2 :(得分:2)

问题出在这里

  while (br1.readLine() != null){
       System.out.println(br1.readLine()); 
      }
  br1.close();
  fin.close();        
 }

当你调用br1.readLine()时,它会读出当前行并移动光标位置以指向下一行。您正在调用此方法两次,导致您跳过备用行。你应该每次迭代只调用一次readLine()。

答案 3 :(得分:1)

我建议使用更清晰的代码,这样您和任何阅读它的人都会立即理解您在做什么。

试试这个:

Scanner read;
try{
read=new Scanner(new FileReader("your path"));


while(read.hasNext()){
System.out.println(read.nextLine);
}

read.close();
}

catch(FileNotFoundException e){
}