コンマ区切りの設定ファイルがあります。空行は無視され、無効な行にエラーがあることが必要されていますコンマで区切られた構成ファイルを読み取る最良の方法は何ですか?
FOO、バー
foo2は、BAR3
私は鍵が(HashMap
にこのファイルを読みたいですfoo)は値(bar)でマップされます。
これを行うにはどのような方法が最適ですか?
コンマ区切りの設定ファイルがあります。空行は無視され、無効な行にエラーがあることが必要されていますコンマで区切られた構成ファイルを読み取る最良の方法は何ですか?
FOO、バー
foo2は、BAR3
私は鍵が(HashMap
にこのファイルを読みたいですfoo)は値(bar)でマップされます。
これを行うにはどのような方法が最適ですか?
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();
}
}
}
}
}
あなたの最善の策は、中の値を読み込むこと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();
}
は、文字列 –
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");
}
の一部として\ r \ nも読み取るように動作しないようになりました。今はもっと簡単になるかどうかを確認するためにスキャナのバージョンにコードを付ける必要があります... -/:-) – TofuBeer
は、私は個人的に彼の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")
);
}
@Oscar - 誰が気にしますか? –
私は、約10ページの長さと4ページ幅のブレーススタイルを組み合わせたメソッドに1行のコードを追加しなければならない日まで{行に{いくつかは自分の行にある)。私は一日のうちに良いところを取った。 – TofuBeer
その日、私はその日にやらなければならないことを誰も経験しなくて済むような方法でコード化することに決めました。確かに非常に定義の日:-) – TofuBeer