我正在尝试在.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();
}
}
答案 0 :(得分:8)
您的代码看起来不错,我确信新行正确写入文件。我能想到的唯一原因是您使用不将\n
视为行分隔符的编辑器打开文件,它将\r\n
对视为行分隔符(如Windows上的记事本)。
因此,您可以使用write.print("\r\n")
编写换行符,也可以只使用vim
等其他编辑器打开该文件。无论您使用哪种编辑器打开文件,都会出现换行符。
答案 1 :(得分:2)
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);
答案 2 :(得分:1)
尝试以下代码(使用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();
}
}
答案 3 :(得分:1)
csvWriter.flush()
答案 4 :(得分:1)
您只需将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();
}
}