2012-06-09 12 views
6

Mam ten plik tekstowy z wartościami szerokości i długości geograficznej różnych punktów na mapie. Chcę zapisać te współrzędne w bazie danych mySQL za pomocą hibernacji. Chcę wiedzieć, w jaki sposób mogę podzielić mój ciąg na szerokości i długości geograficzne? Jaki jest ogólny sposób robienia tego typu rzeczy z innymi ogranicznikami, takimi jak spacja, tabulator itd.? Plik:Jak odczytać wartości rozdzielone przecinkami z pliku tekstowego w języku JAVA?

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 

Kod używam do odczytu z pliku:

 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"); 
     } 
+0

Nie wierzę, że pierwsza linia odczytu jest potrzebna. –

Odpowiedz

25

Można użyć metody String.split():

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

potem użyć Double.parseDouble() metodę analizowania ciąg wartość podwoić.

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

Wielkie dzięki. Pracował jak urok. – rishiag

+0

@Dvvovator - Proszę dodać komentarz, proszę! – adatapost

+5

@ user1425223 zauważ, że 'String.split' pobiera wyrażenie regularne i jeśli chcesz się upewnić, że nic zabawnego się nie dzieje (jak w przypadku' .' lub '|'), możesz najpierw przekazać separator przez 'Pattern.quote()': 'str .split (Pattern.quote (".")) '(lub uciekać ręcznie) –

4

Zastosowanie OpenCSV dla niezawodności. Split nigdy nie powinien być używany do takich rzeczy. Oto fragment z własnego programu, który jest dość prosty. Sprawdzam, czy podano znak ogranicznika i używam tego, jeśli jest, jeśli nie, używam domyślnego w OpenCSV (przecinek). Potem przeczytałem nagłówek i pola

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()); 
} 
1

aby podzielić ciąg przecinkiem (,) korzystać str.split(",") i na karcie używać 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"); 
    } 
1

// łac = 3434 & lon = YY38 & rd = 1,0 & | w tym formacie O/P jest displying public class 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()); 
} 

}

0

Można również użyć klasy java.util.Scanner.

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(); 
    } 
} 
Powiązane problemy