繁体   English   中英

如何读取key = value文件以及如何拆分以逗号分隔的String?

[英]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数组访问“列”。

  • 1个问题:检查序列化
  • 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM