web-dev-qa-db-fra.com

Comment lire des valeurs séparées par des virgules dans un fichier texte en Java?

J'ai ce fichier texte avec les valeurs de latitude et de longitude de différents points sur une carte.

Comment puis-je diviser ma chaîne en latitudes et longitudes? Quelle est la manière générale de faire ce type de choses avec d’autres délimiteurs, tels que l’espace ou une tabulation, etc.?

28.515046280572285,77.38258838653564
28.51430151808072,77.38336086273193
28.513566177802456,77.38413333892822
28.512830832397192,77.38490581512451
28.51208605426073,77.3856782913208
28.511341270865113,77.38645076751709

C'est le code que j'utilise pour lire dans le fichier:

try(BufferedReader in = new BufferedReader(new FileReader("C:\\test.txt"))) {
    String str;
    while ((str = in.readLine()) != null) {
        System.out.println(str);
    }
}
catch (IOException e) {
    System.out.println("File Read Error");
}
6
rishiag

Vous pouvez utiliser la méthode String.split() :

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

Après cela, utilisez Double.parseDouble() method pour analyser la valeur de chaîne en un double.

double latitude = Double.parseDouble(tokens[0]);
double longitude = Double.parseDouble(tokens[1]);

Des méthodes d'analyse similaires existent également dans les autres classes wrapper - Integer, Boolean, etc.

26
adatapost

Utilisez OpenCSV pour plus de fiabilité. Split ne devrait jamais être utilisé pour ce genre de choses .Voici un extrait d’un programme personnel, c’est assez simple. Je vérifie si un caractère délimiteur a été spécifié et utilise celui-ci s'il est, sinon j'utilise la valeur par défaut dans OpenCSV (une virgule). Puis je lis l'en-tête et les champs

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

Pour diviser votre chaîne par virgule (,), utilisez str.split(",") et pour tabulation, 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

//lat=3434&lon=yy38&rd=1.0&| dans ce format o/p affiche

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
mrunal bankar

Vous pouvez également utiliser la classe 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();
    }
}
0
modle13