[英]How to read key=value file and how to split a comma-separated String?
我制作了一个配置文件,它有一些以下格式
variableName = value
variableName = value
variableName = value
我知道我可以读取文件,将它们存储在变量中。 但我正在寻找一种简单的方法。 例如,我想将变量名称及其值存储在一个文件中,我想在读取文件时自动恢复变量及其值。 (我知道如何在PHP中做到这一点很容易,但我不是java专家:()
我的第二个问题是关于文件阅读。 例如,我有一个包含行和列的文件,它可以是CSV
one,two,three
four,five,six
seven,eight,nine
我想读它,它返回整列,例如(一个四七)与其他人相同。 我不想仅仅为一个函数使用OpenCSV作为其非面向csv的应用程序。
编辑:
是否可以写入所有变量名称及其值,当我读取文件时,它会自动声明这些变量并赋值?
使用java.util.Properties
读取key=value
文件。 这是一个Sun教程 。
对于CSV,您可以读入所有行并使用String#split()
将每行分成值数组。
Properties类将以name = value格式加载配置文件。 使用FileReader将load方法调用到配置文件。 您可以使用getProperty方法访问任何变量。
Properties props = new Properties();
props.load(new FileReader(configFilePath));
String value = props.getProperty("name");
对于CSV文件,如果所有行具有相同数量的值,则可以使用String.split(“,”)将每行读入数组,并将其分配给2-d数组。 然后通过走2-d数组访问“列”。
2问题:请看这个源代码:
class RowReader { private String path; private String columnSeparator; private List<String[]> rows; private int columnCount; public RowReader(String path, String columnSeparator) { this.path = path; this.columnSeparator = columnSeparator; this.rows = getRows(); if (this.rows == null || this.rows.size() == 0) this.columnCount = 0; else this.columnCount = this.rows.get(0).length; } public List<String> getColumn(int i) { List<String> column = new ArrayList<String>(); for (String[] row : rows) { column.add(row[i]); } return column; } public int getColumnCount() { return columnCount; } private List<String[]> getRows() { List<String[]> rows = new ArrayList<String[]>(); try { FileInputStream fstream = new FileInputStream(path); DataInputStream in = new DataInputStream(fstream); BufferedReader br = new BufferedReader(new InputStreamReader(in)); String line = null; while ((line = br.readLine()) != null) { rows.add(line.split(columnSeparator)); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return rows; }}
测试类:
public class Program {
public static void main(String[] args) {
RowReader reader = new RowReader("j:\\test.txt", ",");
for (int i = 0; i < reader.getColumnCount(); i++) {
List<String> column = reader.getColumn(i);
for (String c : column)
System.out.print(c + ", ");
System.out.println();
}
}
}
控制台输出:
one, four, seven,
two, five, eight,
three, six, nine,
尝试阅读所有内容并使用正则表达式将列表拆分为二维数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.