无法从文件中退出循环Java输入

时间:2014-04-02 21:45:56

标签: java bufferedreader

当我运行程序时,它永远不会停止,并且不知道如何制作(对于每一行)不同的v号(给我语法错误),谢谢你的帮助。 文件格式每行都有字符串int string string

public static void main(String[] args) throws FileNotFoundException, IOException {
    String filelocation = "location";
    filelocation = JOptionPane.showInputDialog("Enter file address");
    BufferedReader inFile = new BufferedReader(new FileReader(filelocation)); //using BufferedReader to get readLine function

    ArrayList<Vehicle> VehicleList = new ArrayList<Vehicle>();
    int counter = 1;
    String dataRow = null; 
    dataRow= inFile.readLine();

    while ( dataRow != null){
        try{
            String[] temp = dataRow.trim().split("\\s+");
            Vehicle v(counter) = new Vehicle (temp[0], Integer.parseInt(temp[1]), temp[2], temp[3], temp[4]);
            VehicleList.add(v1);
            dataRow= inFile.readLine();
        }
        catch(Exception e){}
    }
    inFile.close();
    System.out.println(VehicleList);
    System.out.println(v1);

}

3 个答案:

答案 0 :(得分:1)

如前所述,您最有可能在while循环中获得异常。

但问题的主要问题是dataRow = inFile.readLine()在while循环中。

while ( dataRow != null){
        try{
            String[] temp = dataRow.trim().split("\\s+");
            Vehicle v(counter) = new Vehicle (temp[0], Integer.parseInt(temp[1]), temp[2], temp[3], temp[4]);
            VehicleList.add(v1);
            dataRow= inFile.readLine(); // <---shouldn't be in while loop
        }
        catch(Exception e){}
    }
    inFile.close();
    System.out.println(VehicleList);
    System.out.println(v1);

}

所以会发生什么,抛出异常,然后跳转到catch块而不改变dataRow的值!

因此,每次执行while循环时,它实际上是将dataRow与您设置的第一个值进行比较。

您可以通过更改代码来解决此问题,如下例所示:

    while((dataRow = inFile.readLine()) != null){
        try {
            //some stuff
        }
        catch(Exception e){
            //some other stuff
        }

    }

确保删除dataRow = inFile.readLine()

的while循环之前的行

因此,它会或多或少地表现出你想要它的表现。如果您想忽略抛出的异常,这将继续处理该文件直到结束。抛出异常的行将被跳过。

答案 1 :(得分:0)

您无法指定Dynamic variable names。 Java是一种强类型语言。

您可以做的是将其保存在列表中,并使用索引来获取和设置它。

您的代码应如下所示:

String[] temp = dataRow.trim().split("\\s+");
Vehicle v = new Vehicle (temp[0], Integer.parseInt(temp[1]), temp[2], temp[3], temp[4]);
VehicleList.add(v);
System.out.println(v);
dataRow= inFile.readLine();

获取使用

VehicleList.get(index)

设置使用

VehicleList.set(index, VEHICLE)

答案 2 :(得分:0)

循环未终止的最可能原因是读取循环中的异常(您使用异常并尝试继续)。根据您的示例,我认为您对split与Vehicle构造函数的输入不匹配。另外,正如您所知,您不能拥有动态变量名称,例如Vehicle v(counter)= new Vehicle(...给出语法异常。

查看此版本是否有助于向您显示问题所在。

public static void main(String[] args) throws FileNotFoundException, IOException {
    String filelocation = "location";
    filelocation = JOptionPane.showInputDialog("Enter file address");
    BufferedReader inFile = new BufferedReader(new FileReader(filelocation)); //using BufferedReader to get readLine function

    ArrayList<Vehicle> VehicleList = new ArrayList<Vehicle>();
    int counter = 0;
    String dataRow = null; 
    dataRow= inFile.readLine();

    try{
        while ( dataRow != null){
            String[] temp = dataRow.trim().split("\\s+");

            if (temp.length != 5) 
                throw new Exception("split returned "+temp.length);

            Vehicle v = new Vehicle (temp[0], Integer.parseInt(temp[1]), temp[2], temp[3], temp[4]);  
            VehicleList.add(v);
            System.out.println(v);
            dataRow= inFile.readLine();
        }
    }
    catch(Exception e){
        e.printStackTrace();
    }
    finally {
        inFile.close();
    }

    System.out.println(VehicleList);

}