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);
- попробуйте очистить поток, прежде чем закрыть его
csvWriter.flush()
- вместо использования 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();
}
}