Я хочу получить одну строку в качестве заголовка, а остальные данные добавляются в файл - PullRequest
0 голосов
/ 23 сентября 2019

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

Ожидаемый результат должен быть примерно таким:

Id: Название: ID группы

1: ab: 2

2: fd: 3

3: fwsj: 3


public void writeOutputToFile(int id, String title, int groupId) throws IOException {

        OutputStream os = new FileOutputStream(new File("output_report.txt"), true);
        os.write("\n  Id      Title     Group ID \n ".getBytes());

        os.write((id + "             " +title + "     " + groupId + "\n").getBytes());
        os.close();


    }

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019

хорошо, внутри вашего метода вы записываете заголовки в файл, так что, очевидно, всякий раз, когда вы вызываете его, они записываются ..

Вы можете разделить его на два метода - один, который записывает заголовки (ивызывается только один раз) и другой, который записывает данные (и вызывается один раз для строки).
В качестве альтернативы, используйте какой-то цикл внутри вашего метода для записи каждой строки в файл после однократной записи заголовков.

0 голосов
/ 23 сентября 2019

Проблема

Это многократно вводит заголовок, потому что когда вы вызываете метод, вы всегда собираетесь вставить заголовок.Вместо этого вы можете написать код утилиты, которая вводит заголовки для файла, который вы создаете, а затем отдельный метод для вставки данных.

Решение

Решение 1)

Вспомогательный метод util будет выглядеть примерно так:

// String... allows for multiple string parameters to be entered for all of your headers.
public void prepFile(File f, String... headers) {
     StringBuffer buffer = new StringBuffer();
     for (String header : headers) {
         buffer.append(header + "\t");
     }

     OutputStream os = new FileOutputStream(f, true);
     os.write(buffer.toString().getBytes());
     os.close();

}

После того, как файл подготовлен, вы можете использовать метод writeOutputToFile для всех данных.

Редактировать

Решение 2)

Если вы собираетесь создать для этого отдельный класс, я бы порекомендовал вам настроить его следующим образом:

import java.io.*;

public class OutputFile {

    private File file;
    private String[] headers;
    private boolean existed;

    public OutputFile(File f, String... headers) {
        this.file = f;
        this.headers = headers;

        init();
    }

    private void init() {
        existed = file.exists();

        // If the file didn't exist, then you want to create it.
        if (!existed) {
            try {
                file.createNewFile();

                // Afterwards, you can then write your headers to it.
                if (headers != null) {
                    writeData(headers);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public void writeData(int id, String title, int groupId) {
        writeData("" + id, title, "" + groupId);
    }

    public void writeData(String... strings) {
        StringBuffer buffer = new StringBuffer();
        for (String s : strings) {
            buffer.append(s + "\t");
        }
        buffer.append("\n");

        writeData(buffer.toString());
    }

    public void writeData(String data) {
        OutputStream os = null;
        try {
            os = new FileOutputStream(file, true);
            os.write(data.getBytes());
            os.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}
...