2009-03-26 10 views

答えて

6

x、yの代わりにx = yを使用できる場合は、Propertiesクラスを使用できます。

x、yを持つ必要がある場合は、java.util.Scannerを参照すると、区切り記号として区切り記号を使用するように設定できます(javadocはその例を示しています)。

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

、プロパティバージョン(構文解析のための方法単純に、何も存在しないとして)

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 - 誰が気にしますか? –

+0

私は、約10ページの長さと4ページ幅のブレーススタイルを組み合わせたメソッドに1行のコードを追加しなければならない日まで{行に{いくつかは自分の行にある)。私は一日のうちに良いところを取った。 – TofuBeer

+0

その日、私はその日にやらなければならないことを誰も経験しなくて済むような方法でコード化することに決めました。確かに非常に定義の日:-) – TofuBeer

5

あなたの最善の策は、中の値を読み込むことjava.util.Scannerクラスを使用することですカンマを区切り文字として使用します。 Javadocをここにリンクされています

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

例は次のようになります。

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

は、文字列 –

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

の一部として\ r \ nも読み取るように動作しないようになりました。今はもっと簡単になるかどうかを確認するためにスキャナのバージョンにコードを付ける必要があります... -/:-) – TofuBeer

0

は、私は個人的に彼のLabeled CSVパーサであるスティーブン・Ostermillerという名前の男、で瓶を使用しています。ここにいくつかのサンプルコードがあります。

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") 
    ); 
} 
関連する問題