【问题标题】:BufferedReader won't read after first lineBufferedReader 在第一行之后不会读取
【发布时间】:2014-10-21 11:42:57
【问题描述】:

我有 4 个文本文件 a.txt、b.txt、c.txt 和 c.txt 我有一个从 a.txt 中获取行的代码,如果条件符合,那么我还有另一个条件可以从 b、c 或 d 中进一步获取(遵循条件)

import java.io.*; 
public class Scholarship { 
public static void main(String[] args) {

    try{

        FileInputStream fstream1 = new  FileInputStream("a.txt"); 
        FileInputStream fstream2 = new  FileInputStream("b.txt"); 
        FileInputStream fstream3 = new  FileInputStream("c.txt"); 
        FileInputStream fstream4 = new  FileInputStream("d.txt");       
             DataInputStream in1 = new DataInputStream(fstream1);
             DataInputStream in2 = new DataInputStream(fstream2);
             DataInputStream in3 = new DataInputStream(fstream3);
             DataInputStream in4 = new DataInputStream(fstream4);
              BufferedReader br1 = new BufferedReader(new InputStreamReader(in1));
              BufferedReader br2 = new BufferedReader(new InputStreamReader(in2));
              BufferedReader br3 = new BufferedReader(new InputStreamReader(in3));
              BufferedReader br4 = new BufferedReader(new InputStreamReader(in4));

        String strLine1=null;
        String strLine2=null;
        String strLine3=null;
        String strLine4=null;

        while((strLine1 = br1.readLine()) != null){

           String[] column1 = strLine1.split("\\|");

           if(Integer.parseInt(column1[1])<5000) {   

                while((strLine2 = br2.readLine())!=null){
                   String[] column2 = strLine2.split("\\|");
                   if(  (column1[0].equals(column2[0]))&&(column2[2].equals("mumbai"))&&( (column2[3].equals("C"))||(column2[3].equals("D")) ) ){   
                     System.out.println(strLine2);

                   }//if ends                   
                }//while ends 

                while((strLine3 = br3.readLine())!=null){
                   String[] column3 = strLine3.split("\\|");
                   if(  (column1[0].equals(column3[0]))&&(column3[2].equals("mumbai"))&&( (column3[3].equals("C"))||(column3[3].equals("D")) ) ){   
                     System.out.println(strLine3);

                   }//if ends                   
                }//while ends 

                while((strLine4 = br4.readLine())!=null){
                   String[] column4 = strLine4.split("\\|");
                   if(  (column1[0].equals(column4[0]))&&(column4[2].equals("mumbai"))&&( (column4[3].equals("C"))||(column4[3].equals("D")) ) ){   
                     System.out.println(strLine4);

                   }//if ends                   
                }//while ends   


             }//if ends          
         }//while ends       

        in1.close();
        in2.close();
        in3.close();
        in4.close();
    }catch (Exception e){//Catch exception if any
        System.err.println("Error: " + e.getMessage());
    }
}
}

外部循环用于 a.txt,内部 3 个循环用于 b、c 和 d。该代码仅在 a.txt 中满足第一个条件时打印。它不检查 a.txt 中的后续行。我用 Scanner 方法试过了,但还是有同样的问题。

【问题讨论】:

  • 你能把你a.txt的内容贴出来吗?
  • 你可以尝试创建这样的读者吗:BufferedReader br1 = Files.newBufferedReader(Paths.get("a.txt"), StandardCharsets.UTF_8);

标签: java file loops java.util.scanner bufferedreader


【解决方案1】:

除非您有意读取原始 Java 数据类型,否则不应使用 DataInputStream(请参阅 http://docs.oracle.com/javase/7/docs/api/java/io/DataInputStream.html)。

您可以像这样实例化 BufferedReader 阅读器:

BufferedReader br1 = Files.newBufferedReader(Paths.get("a.txt"), StandardCharsets.UTF_8);

或者传统上是这样的:

BufferedReader br1 = new BufferedReader(new FileReader("a.txt"));

最后你可以关闭所有的 BufferedReader。它们将隐式级联关闭所有包含的流。

【讨论】:

  • 你可以简单地使用BufferedReader br1 = new BufferedReader(new FileReader("a.txt"));
猜你喜欢
  • 1970-01-01
  • 2018-09-04
  • 2015-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多