Как записать данные по указанному col / index в текстовый файл, используя Java - PullRequest
0 голосов
/ 23 октября 2018

Например, у меня есть данные:

000001!1 |TEST 3     |18   01/22 01/23    |789

Я запишу данные на основе указанного столбца / индекса.Я искал в Интернете альтернативу, использующую строковый формат, но у меня были правила, которые определяют указанный столбец txt и данные.Вот примеры правил:

Нет. Запись в столбце 1, Имя в столбце 12.

Как я могу это сделать?Спасибо ..

Ответы [ 3 ]

0 голосов
/ 23 октября 2018

У меня есть какой-то псевдокод, который может помочь вам получить отформатированный код в текстовом файле ... это какие-то табличные данные

public static void main(String[] args) throws IOException {     
    File dir = new File("C:\\Test");
    dir.mkdirs();
    File file = new File(dir, "filename.txt");
    FileWriter fileWriter = new FileWriter(file);
    int SNIndexlength = "Serial_Number".length();
    SNIndexlength = SNIndexlength-3+20;
    fileWriter.write(String.format("%s %20s %20s  \r\n", "Serial_Number", "Name", "Count"));

    List<Data> datas = new ArrayList<Data>();
    datas.add(new Data("001", "TEST1", 3));
    datas.add(new Data("002", "TEST2", 5));
    datas.add(new Data("003", "TEST3", 7));
    datas.add(new Data("004", "TEST4", 10));
    datas.add(new Data("005", "TEST5", 0));

    for (Data data : datas) {
        fileWriter.write(String.format("%s %"+SNIndexlength+"s %20s  \r\n", data.sNum, data.name, data.count));
    }
    fileWriter.flush();
    fileWriter.close();
}

static class Data{
    public String sNum;
    public String name;
    public int count;   
    public Data(String no, String name, int count){
        this.sNum = no;
        this.name = name;
        this.count = count;
    }
}

Я обновил ответ, в котором я изменил написаниечтобы текстовый файл был динамическим с использованием коллекции, надеюсь, это поможет.

0 голосов
/ 23 октября 2018

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

Это довольно неудобно, может соответствовать вашему сценарию использования или нет.

0 голосов
/ 23 октября 2018

Псевдокод:

public boolean editFile(AFileObject file, Integer line, Integer col, String value) {
    file.openInReadMode();

    // We write the results in a temporary file
    AFileObject tempFile = AFileObject.getNewTempFile();
    tempFile.openInWriteMode();

    // We start looping until we'll reach the line to edit
    for (int i = 0; ! file.eof() || i < line ; i++) {
        tempFile.write(file.readLine());
    }

    // If we reached the end of file before, do nothing and returns false
    if file.eof() {
        file.close();
        tempFile.delete();
        return false;
    }

    // We edit the line here, then we write it in the temporary file
    // in place of the original line
    String lineToEdit = file.readLine();
    lineToEdit = editLineColumn(lineToEdit, col, value);
    tempFile.write(lineToEdit);

    // Then we write the remaining lines
    while (! file.eof()) {
        tempFile.write(file.readLine());
    }

    // Work done. We just have now to close the files and
    // Replace the source file by the temporary one 
    file.close();
    tempFile.close();
    tempFile.rename(file.getFileName());

    return true;
}

private boolean String editLineColumn(String line, Integer col, String value) {
    // Your code here :)
}

Как видите, это псевдокод.Вам нужно будет найти пакет ввода-вывода, который соответствует вашим потребностям (попробуйте, например, Java.IO, с объектами FileReader и FileWriter).Начните создавать свой собственный код, тогда мы сможем помочь.

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