Как читать значения, разделенные запятыми, из текстового файла в JAVA?

у меня есть этот текстовый файл со значениями широты и долготы разных точек на карте. Я хочу сохранить эти координаты в базе данных mySQL, используя hibernate. Я хочу знать, как я могу разделить свою строку на широты и долготы? Каков общий способ сделать эти типы вещей, которые с другими разделителями, такими как пространство, вкладка и т. д.? Файл:

28.515046280572285,77.38258838653564
28.51430151808072,77.38336086273193
28.513566177802456,77.38413333892822
28.512830832397192,77.38490581512451
28.51208605426073,77.3856782913208
28.511341270865113,77.38645076751709
28.510530488025346,77.38720178604126
28.509615992924807,77.38790988922119
28.50875805732363,77.38862872123718
28.507994394490268,77.38943338394165
28.50728729434496,77.39038825035095
28.506674470385246,77.39145040512085
28.506174780521828,77.39260911941528
28.505665660113582,77.39376783370972
28.505156537248446,77.39492654800415
28.50466626846366,77.39608526229858
28.504175997400655,77.39724397659302
28.503685724059455,77.39840269088745
28.503195448440064,77.39956140518188
28.50276174118543,77.4007523059845
28.502309175192945,77.40194320678711
28.50185660725938,77.40313410758972
28.50140403738471,77.40432500839233
28.500951465568985,77.40551590919495
28.500498891812207,77.40670680999756
28.5000463161144,77.40789771080017
28.49959373847559,77.40908861160278

код, который я использую для чтения из файла:

       try {
            BufferedReader in = new BufferedReader(new FileReader("G:RoutePPAdvant2.txt"));
            String str;
            str = in.readLine();
            while ((str = in.readLine()) != null) {
                System.out.println(str);
            }
            in.close();
        } catch (IOException e) {
            System.out.println("File Read Error");
        }

6 ответов


можно использовать String.split() способ:

String[] ar=str.split(",");

после этого, используйте Double.parseDouble () метод для анализа строкового значения в double.

double latitudes=Double.parseDouble(ar[0]);
double longitudes=Double.parseDouble(ar[1]);

используйте OpenCSV для надежности. Сплит никогда не должен использоваться для таких вещей. Вот фрагмент из моей собственной программы, это довольно просто. Я проверяю, был ли указан символ разделителя и использую этот, если он есть, если нет, я использую значение по умолчанию в OpenCSV (запятая). Затем я прочитал заголовок и поля

CSVReader reader = null;
try {
    if (delimiter > 0) {
        reader = new CSVReader(new FileReader(this.csvFile), this.delimiter);
    }
    else {
        reader = new CSVReader(new FileReader(this.csvFile));
    }

    // these should be the header fields
    header = reader.readNext();
    while ((fields = reader.readNext()) != null) {
        // more code
    }
catch (IOException e) {
    System.err.println(e.getMessage());
}

OpenCSV-популярная библиотека Если вы предпочитаете использовать.
Подробности здесь: http://opencsv.sourceforge.net/

есть также несколько других вопросов stackoverflow по аналогичной теме:


//широта=3434&долгота=yy38&РД=1.0&| в том формате, О/Р displying открытый класс ReadText {

public static void main(String[] args) throws Exception {
    FileInputStream f= new FileInputStream("D:/workplace/sample/bookstore.txt");
    BufferedReader br = new BufferedReader(new InputStreamReader(f));
    String strline;
    StringBuffer sb = new StringBuffer();
    while ((strline = br.readLine()) != null)
    {
        String[] arraylist=StringUtils.split(strline, ",");
        if(arraylist.length == 2){
            sb.append("lat=").append(StringUtils.trim(arraylist[0])).append("&lon=").append(StringUtils.trim(arraylist[1])).append("&rt=1.0&|");

        }else{
            System.out.println("Error: "+strline);
        }

    }

    System.out.println("Data: "+sb.toString());
}

}


чтобы разделить строку на запятую (,), используйте str.split(",") и для вкладки используйте str.split("\t")

    try {
        BufferedReader in = new BufferedReader(
                               new FileReader("G:\RoutePPAdvant2.txt"));
        String str;

        while ((str = in.readLine())!= null) {
            String[] ar=str.split(",");
            ...
        }
        in.close();
    } catch (IOException e) {
        System.out.println("File Read Error");
    }

вы также можете использовать Java.утиль.Класс сканеров.

private static void readFileWithScanner() {
    File file = new File("path/to/your/file/file.txt");

    Scanner scan = null;

    try {
        scan = new Scanner(file);

        while (scan.hasNextLine()) {
            String line = scan.nextLine();
            String[] lineArray = line.split(",");
            // do something with lineArray, such as instantiate an object
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } finally {
        scan.close();
    }
}