BufferedReader 有时读取文本,有时不读取

BufferedReader sometimes read text, sometimes doesn't

我正在尝试从 .java 中读取我拥有的方法,还有 类,我正在使用 taggs 来识别它们并存储它们,问题是使用 BufferedReader 有时只是行不通,缓冲区出于我无法理解的原因跳过了很多行,有时当我自己检查文件时,我只是在行之间放置随机空格,这修复了一些部分,但我可以'让缓冲区读取我所有的文本而不跳过任何内容,到目前为止我的代码是这样的:

    public class ReadFile {
        public static void main(String[] args) {
        int numclas=0,numbase=0,numbaseagr=0,numbmet=0,numag=0;
        String mt="//MT";
        String[] nomclass2 = new String[10];
        String[] nommetodo2 = new String[50];
        boolean metodo=false;
        BufferedReader in = null;
        try {
          in = new BufferedReader(new FileReader("\Program.java"));
          String read = null;
          while ((read = in.readLine()) != null) {
          read = in.readLine();
          String[] splited = read.trim().split("\s+");

          for(int i=0;i<splited.length;i++){
            System.out.println(splited[i]);

            if(splited[i].equals("class")){
               nomclass2[numclas]=splited[i+1];
               numclas=numclas+1;
        }

           if (splited[i].equals(mt)){
            metodo=true;
        }

            if (splited[i].equals("public")){
                if (splited[i+1].equals("static")){
                    nommetodo2[numbmet]=splited[i+3];
                    numbmet=numbmet+1;
                }
                if (splited[i+1].equals("int")||splited[i+1].equals("double")||splited[i+1].equals("String")||splited[i+1].equals("boolean")){
                nommetodo2[numbmet]=splited[i+2];
                numbmet=numbmet+1;
                }

        if (splited[i].equals("int")||splited[i].equals("double")||splited[i].equals("String")||splited[i].equals("boolean")){
                nommetodo2[numbmet]=splited[i+1];
                numbmet=numbmet+1;
                }
        metodo=false;
        }

        if ((splited[i].equals("int")||splited[i].equals("double")||splited[i].equals("String")||splited[i].equals("boolean"))&&metodo){   
                nommetodo2[numbmet]=splited[i+1];
                numbmet=numbmet+1;
                metodo=false;
                }

        }


}
 } catch (IOException e) {
System.out.println("There was a problem: " + e);
e.printStackTrace();
 } finally {
try {
    in.close();
} catch (Exception e) {
}
 }

现在让我向您展示。java我正在尝试阅读:

 import java.text.DecimalFormat;
 import java.io.*;
 //Main file of the program 1
 public class Program1 {
  //MT
  public static void main (String args []) {
  DecimalFormat format=new DecimalFormat("##.##");
  System.out.println("How many data do you want to insert?");
  int num=Leer.Int();
  Fila lista=new Fila();
  Fila lista2=new Fila();
  double x=0.0;
  for(int i=0;i<num;i++){
  x=Leer.Double();
  lista.addNum(x);
        }
    double prom=0.0;
    double desv=0.0;
    prom=lista.getprom();
    desv=lista.getdevst();
    System.out.println("The mean for column 1 is: "+format.format(prom));
    System.out.println("The Std.Dev for column 1 is: "+format.format(desv));
    System.out.println("How many data do you want to insert?");
num=Leer.Int();
x=0.0;
for(int i=0;i<num;i++) {
x=Leer.Double();
lista2.addNum(x);
        }
    prom=0.0;
desv=0.0;
prom=lista2.getprom();
desv=lista2.getdevst();
    System.out.println("The mean for column 2 is: "+format.format(prom));
System.out.println("The Std.Dev for column 2 is: "+format.format(desv));
    }
}

以及我打印数组时的结果

Date:
12/12/12
import
java.text.DecimalFormat;
//Main
file
of
the
program
1
//MT
DecimalFormat
format=new
DecimalFormat("##.##");
so on...

看看 Buffer 在 //MT 中是如何跳过很多行的,很多这样的事情正在发生(看看它是如何忽略程序的第一行),我不知道如何解决它,因为有时当我尝试 "fix it" 并在行中添加一些空格时,我得到一个空指针并且程序结束。

如有任何帮助,我们将不胜感激。

这只是部分答案 - 至少您的程序每隔一行就会跳过:

while ((read = in.readLine()) != null)

将从文件中读取一行。该行立即被丢弃,因为紧随其后的语句:

read = in.readLine();

读取并处理文件的下一行。

(此外,'splited' 应该是 'splitted' 以及许多其他拼写错误,但它们并没有真正影响您的程序,只是它的可读性:-))