Как прочитать файл ключ = значение и как разделить запятую строку? - PullRequest
8 голосов
/ 21 февраля 2010

Я сделал файл конфигурации, он имеет следующий формат

variableName = value
variableName = value
variableName = value

Я знаю, что могу прочитать файл, разделить их, сохранить их в переменной. Но я ищу легкий путь. Например, я хочу сохранить имена переменных и их значения в файле и хочу, чтобы при чтении файла они автоматически восстанавливали переменные и их значения. (Я знаю, как сделать это в php, и это очень легко, но я не эксперт по Java :()

Мой второй вопрос касается чтения следующего файла. У меня есть файл, в котором есть строки и столбцы это может быть CSV, например

one,two,three
four,five,six
seven,eight,nine

Я хочу прочитать, что он возвращает целый столбец, например (один четыре семь), то же самое для других. Я не хочу использовать OpenCSV как приложение, не ориентированное на csv, только для одной функции.

РЕДАКТИРОВАНИЕ:


Можно ли записать все имя переменной и ее значение, и когда я читаю файл, она автоматически объявляет эти переменные и присваивает значения?

Ответы [ 4 ]

9 голосов
/ 21 февраля 2010

Используйте java.util.Properties для чтения в файле key=value. Вот учебник Sun .

Что касается CSV, вы можете прочитать все строки и использовать String#split(), чтобы разбить каждую строку на массив значений.

3 голосов
/ 21 февраля 2010

Класс Properties загрузит ваш файл конфигурации в формате имя = значение. Вызовите метод загрузки с помощью FileReader для файла конфигурации. Вы можете получить доступ к любой переменной, используя метод getProperty.

Properties props = new Properties();
props.load(new FileReader(configFilePath);

String value = props.getProperty("name");

Что касается CSV-файла, если все строки имеют одинаковое количество значений, вы можете прочитать каждую строку в массив с помощью String.split (",") и назначить ее для двумерного массива. Затем получите доступ к «столбцу», пройдя 2-й массив.

1 голос
/ 21 февраля 2010
  • 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, 
0 голосов
/ 21 февраля 2010

Попробуйте прочитать все и использовать регулярное выражение, разбивающее список на 2-й массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...