2009-03-26 7 views

Répondre

6

Si vous pouvez utiliser x = y au lieu de x, y vous pouvez utiliser la classe Properties.

Si vous avez besoin de x, y alors regardez le java.util.Scanner vous pouvez définir le séparateur à utiliser comme séparateur (le javadoc montre des exemples de faire cela).

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 

class Main 
{ 
    public static void main(final String[] argv) 
    { 
     final File file; 

     file = new File(argv[0]); 

     try 
     { 
      final Scanner scanner; 

      scanner = new Scanner(file); 

      while(scanner.hasNextLine()) 
      { 
       if(scanner.hasNext(".*,")) 
       { 
        String key; 
        final String value; 

        key = scanner.next(".*,").trim(); 

        if(!(scanner.hasNext())) 
        { 
         // pick a better exception to throw 
         throw new Error("Missing value for key: " + key); 
        } 

        key = key.substring(0, key.length() - 1); 
        value = scanner.next(); 

        System.out.println("key = " + key + " value = " + value); 
       } 
      } 
     } 
     catch(final FileNotFoundException ex) 
     { 
      ex.printStackTrace(); 
     } 
    } 
} 

et la version Propriétés (plus simple pour l'analyse syntaxique, car il n'y en a pas)

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.io.Reader; 
import java.util.Properties; 

class Main 
{ 
    public static void main(final String[] argv) 
    { 
     Reader reader; 

     reader = null; 

     try 
     { 
      final Properties properties; 

      reader = new BufferedReader(
          new FileReader(argv[0])); 
      properties = new Properties(); 
      properties.load(reader); 
      System.out.println(properties); 
     } 
     catch(final IOException ex) 
     { 
      ex.printStackTrace(); 
     } 
     finally 
     { 
      if(reader != null) 
      { 
       try 
       { 
        reader.close(); 
       } 
       catch(final IOException ex) 
       { 
        ex.printStackTrace(); 
       } 
      } 
     } 
    } 
} 
+0

@Oscar - Qui s'en soucie? –

+0

J'avais l'habitude de mettre {sur la ligne jusqu'au jour où je devais ajouter une seule ligne de code à une méthode qui faisait environ 10 pages et 4 pages de large avec un mélange de styles (certains manquants, d'autres sur la même ligne et certains sur leur propre ligne). Ça m'a pris la meilleure partie d'une journée. – TofuBeer

+0

Ce jour-là, j'ai décidé de coder de manière à ce que personne ne soit obligé de faire ce que j'avais à faire ce jour-là. Une journée bien décidée :-) – TofuBeer

5

Votre meilleur pari est d'utiliser la classe java.util.Scanner à lire dans les valeurs de la fichier de configuration, en utilisant la virgule comme délimiteur. Lien ici à la Javadoc:

http://java.sun.com/j2se/1.5.0/docs/api/java/util/Scanner.html

exemple serait:

Scanner sc = new Scanner(new File("thing.config")); 
sc.useDelimiter(","); 
while (sc.hasNext()) { 
    String token = sc.next(); 
} 
+0

ne va pas au travail car il va également lire \ r \ n dans le cadre de la chaîne –

0
try { 
    BufferedReader cfgFile = new BufferedReader(new FileReader(new File("config.file"))); 
    String line = null; 

    // Read the file line by line 
    while ((line = cfgFile.readLine()) != null) { 
    line.trim(); 
    // Ignore empty lines 
    if (!rec.equals("")) { 
     String [] fields = line.split(","); 
     String key = fields[0]; 
     String value = fields[1]; 
     // TODO: Check for more than 2 fields 
     // TODO: Add key, value pair to Hashmap 
    } // if 
    } // while 

    cfgFile.close(); 
} catch (IOException e) { 
    System.out.println("Unexpected File IO Error"); 
} 
+0

maintenant je dois aller coder une version Scanner pour voir si ce serait plus simple ... merci: -/:-) – TofuBeer

0

Personnellement, j'utiliser un pot par un gars nommé Stephen Ostermiller, qui est son analyseur Labeled CSV. Voici un exemple de code.

LabeledCSVParser lcsvp = new LabeledCSVParser(
    new CSVParser(
     new StringReader(
      "Name,Phone\n" + 
      "Stewart,212-555-3233\n" + 
      "Cindy,212-555-8492\n" 
     ) 
    ) 
); 

while(lcsvp.getLine() != null){ 
    System.out.println(
     "Name: " + lcsvp.getValueByLabel("Name") 
    ); 
    System.out.println(
     "Phone: " + lcsvp.getValueByLabel("Phone") 
    ); 
} 
Questions connexes