Android: Как написать новую строку в файле CSV?

Я пытаюсь упорядочить свои данные в файле.CSV. Я хочу поместить свои данные в определенную строку, поэтому я попытался поместить "\n", но это не работает. Пожалуйста, помогите мне поместить данные в определенную строку. заранее..

public void writeData(String data,String strFilePath)
        {

            PrintWriter csvWriter;
            try
            {

                File file = new File(strFilePath);
                if(!file.exists()){
                    file = new File(strFilePath);
                }
                csvWriter = new  PrintWriter(new FileWriter(file,true));


                csvWriter.print(data+","+"hello");
                csvWriter.append('\n');
                csvWriter.print("world");


                csvWriter.close();


            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }

5 ответов

Решение

Ваш код выглядит хорошо, и я уверен, что новая строка правильно записана в файл. Единственная причина, по которой я могу думать, это то, что вы открыли файл в редакторе, который не обрабатывает \n как разделитель строк, он рассматривает \r\n пара в качестве разделителя строк (как Блокнот в Windows).

Таким образом, вы можете написать новую строку с write.print("\r\n")или просто откройте файл в других редакторах, таких как vim, Независимо от того, каким редактором вы пользуетесь для открытия файла, там есть символ новой строки.

Файлы CSV создавать не так просто, как может показаться. Я столкнулся с множеством проблем при попытке написать быстрый анализатор / писатель CSV.

Просто используйте OpenCSV и решите все свои проблемы мгновенно.

Используя OpenCSV, вы можете сделать что-то вроде этого:

CSVWriter writer = new CSVWriter(new FileWriter("yourfile.csv"), '\t');
// feed in your array (or convert your data to an array)
String[] entries = "first#second#third".split("#");
writer.writeNext(entries);
  1. попробуйте очистить поток, прежде чем закрыть егоcsvWriter.flush()
  2. вместо использования print, попробуйте println

Попробуйте следующий код (используя StringBuffer) - потокобезопасная, изменяемая последовательность символов:

    public void writeData(String data, String strFilePath) {

    PrintWriter csvWriter;
    try {
        /*1. declare stringBuffer*/
        StringBuffer oneLineStringBuffer = new StringBuffer();

        File file = new File(strFilePath);
        if (!file.exists()) {
            file = new File(strFilePath);

        }
        csvWriter = new PrintWriter(new FileWriter(file, true));

        /*2. append to stringBuffer*/   
        oneLineStringBuffer.append(data + "," + "hello");
        oneLineStringBuffer.append("\n");
        oneLineStringBuffer.append("world");

        /*3. print to csvWriter*/
        csvWriter.print(oneLineStringBuffer);

        csvWriter.close();

    } catch (Exception e) {
        e.printStackTrace();
    }
}

Вы просто должны изменить csvWriter.print("world"); в csvWriter.println("world");, Следующая печать будет в следующей новой строке.

public void writeData(String data,String strFilePath)
            {

                PrintWriter csvWriter;
                try
                {

                    File file = new File(strFilePath);
                    if(!file.exists()){
                        file = new File(strFilePath);
                    }
                    csvWriter = new  PrintWriter(new FileWriter(file,true));


                    csvWriter.println(data+","+"hello");
                    csvWriter.print("world");


                    csvWriter.close();


                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            }
Другие вопросы по тегам