Nullpointerexception表示通过split()处理txt文件

时间:2017-06-22 00:35:09

标签: java

我知道这里有很多类似的问题,但我仍然无法解决。我可以得到我想要的所有结果。但是,最后,它仍会显示nullpointerexception。我不知道为什么。有人可以帮忙吗?

public class PointGenterate {

public static void main(String[] args) throws FileNotFoundException {
    // TODO Auto-generated method stub
    try{
    File file = new File("123.txt");
    double[] pointsid = new double[10];
    String[] data = null;

    for(int i = 0; i <10; i++){
        double rn = (int)(Math.random()*120);
        System.out.println(rn);
        pointsid[i] = rn;
    }
    //read file
    InputStreamReader rs = new InputStreamReader(new FileInputStream(file));//create input stream reader object
    BufferedReader br = new BufferedReader(rs);
    String line = "";
    line = br.readLine();
    //
    File write = new File("output.KML");
    write.createNewFile();
    BufferedWriter out = new BufferedWriter(new FileWriter(write));
    while(line != null){
        line = br.readLine();
        if(line==" "){
            System.out.print("empty");
        }else{
        data = line.split(",|:|[|]");
        }
        for(int i = 0; i < data.length; i++){
            data[i] = data[i].trim();
            System.out.println(data[i] + "num" + i);
        }
        if(data.length > 15){
            double id = Double.parseDouble(data[4]);
            for(int i = 0; i <10; i++){
                if(id == pointsid[i]){
                    data[10] = data[10].substring(0, data[10].length()-2);
                    data[15] = data[15].substring(1,data[15].length());
                    data[16] = data[16].substring(0, data[16].length()-6);
                    out.write(data[8]+" "+ data[10]+ " " + data[13] + data[15] + data[16]+ "\r\n");
                    out.flush();
                }
            }
        }



        //System.out.println(line);
    }



    out.close();
    }
    catch(Exception e){
        e.printStackTrace();            
    }
}

}

txt文件格式就像

{ "type": "Feature", "properties": { "id": 126.000000, "osm_id": 4851918786.000000, "name": "Moray House Library", "type": "library" }, "geometry": { "type": "Point", "coordinates": [ -3.180841771200988, 55.950622362732418 ] } },

这是一行。我有很多行,实际上这只是一个测试代码。如果有效。我想将它作为javaseverlet类中的方法编写。获取字符串坐标并将其返回到我的JS font-end。

1 个答案:

答案 0 :(得分:1)

您的代码存在一些问题。在本节中:

InputStreamReader rs = new InputStreamReader(new FileInputStream(file));//create input stream reader object
BufferedReader br = new BufferedReader(rs);
String line = "";
line = br.readLine(); // here you read the first line in the file
//
File write = new File("output.KML");
write.createNewFile();
BufferedWriter out = new BufferedWriter(new FileWriter(write));
while(line != null){ // here you check that it's not null (it's not, you read the first line OK)
    line = br.readLine(); // here you read the second line (there is no second line, now line is null)
    if(line==" "){ // now you check if the line is a space character (this is wrong for 2 reasons, that's not how you compare strings, and a space character is not an empty string)
        System.out.print("empty");
    }else{
    data = line.split(",|:|[|]"); // here you call split() on line but line is null
    }

当您检查字符串是否为空时,由于两个原因,您执行line == " "这是错误的。首先,您无法使用==来比较字符串 - 请阅读this question以获取有关原因的详细信息。其次," "是一个包含空格字符的字符串。 ""是一个空字符串。

如果要检查字符串是否为空,可以这样做:

line.equals("")

或者像这样:

line.isEmpty()

这里的代码包含一些小的更改,以便在不抛出异常的情况下运行。

public class PointGenterate {

    public static void main(String[] args) throws Exception {
        try {
            File file = new File("123.txt");
            double[] pointsid = new double[10];
            String[] data = null;

            for(int i = 0; i < 10; i++){
                double rn = (int)(Math.random()*120);
                System.out.println(rn);
                pointsid[i] = rn;
            }

            //read file
            InputStreamReader rs = new InputStreamReader(new FileInputStream(file));//create input stream reader object
            BufferedReader br = new BufferedReader(rs);
            String line = "";

            //
            File write = new File("output.KML");
            write.createNewFile();
            BufferedWriter out = new BufferedWriter(new FileWriter(write));
            while((line = br.readLine()) != null){ // read the line and check for null
                if(line.isEmpty()) { // is the line equal to the empty string?
                    System.out.print("empty");
                } else {
                    data = line.split(",|:|[|]");
                }

                for(int i = 0; i < data.length; i++){
                    data[i] = data[i].trim();
                    System.out.println(data[i] + "num" + i);
                }

                if(data.length > 15){
                    double id = Double.parseDouble(data[4]);
                    for(int i = 0; i <10; i++){
                        if(id == pointsid[i]){
                            data[10] = data[10].substring(0, data[10].length()-2);
                            data[15] = data[15].substring(1,data[15].length());
                            data[16] = data[16].substring(0, data[16].length()-6);
                            out.write(data[8]+" "+ data[10]+ " " + data[13] + data[15] + data[16]+ "\r\n");
                            out.flush();
                        }
                    }
                }
                //System.out.println(line);
            }
            out.close();
        }
        catch(Exception e){
            e.printStackTrace();            
        }
    }
}