2013-09-26 14 views
8

yılında Arabellekli yazar kullanarak bir csv dosyasını yazma. Verilerim doğru yazılmış, ancak verilerin geldiği farklı sütunlara sahip olmak istiyorum. Şu anda tarihin her örneğini bir satırda yazıyor ancak sütunlarla ayrılmıyor.Ben java tamponlu yazar kullanarak bir csv dosyasını yazıyorum Java

kod

DateFormat df = new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss"); 
     File file = new File(dirName + "\\"+ df.format(new Date()) +"_Statistics.csv"); 
     if (!file.exists()) 
      file.createNewFile(); 

     FileWriter fw = new FileWriter(file); 
     writer = new BufferedWriter(fw); 
     writer.write("Message Source"); 
     writer.write("Message Name"); 
     writer.write("Component"); 
     writer.write("Occurance"); 
     writer.write("Message Payload"); 
     writer.write("Bandwidth (Payload)"); 
     writer.write("Message Payload with Header"); 
     writer.write("Bandwidth (Payload with Header)"); 
     writer.newLine(); 
     for (Signal signal : messages) { 
      writer.write(signal.getSource()); 
      writer.write(signal.getName()); 
      writer.write(signal.getComponent()); 
      writer.write(Integer.toString(signal.getOccurance())); 
      writer.write(Integer.toString(signal.getSize())); 
      writer.write(Float.toString(signal.getBandwidth())); 
      writer.write(Integer.toString(signal.getSizewithHeader())); 
      writer.write(Float.toString(signal.getBandwidthWithHeader())); 
      writer.newLine(); 
     } 
     writer.flush(); 
     writer.close(); 
     fw.close(); 

düzgün okunabilir hale getirecek şekilde akıllıca veri sütununu ayırmak için herhangi bir yolu var mı nedir? Bunun yerine tamponlu yazar kullanmanın

DÜZENLEME

Ben java için CSVReader kütüphane kullanmaktadır. http://www.csvreader.com/java_csv.php kod artık Düzgün biçimlendirir

DateFormat df = new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss"); 
     File file = new File(dirName + "\\"+ df.format(new Date()) +"_Statistics.csv"); 
     if (!file.exists()) 
      file.createNewFile(); 

     // Use FileWriter constructor that specifies open for appending 
     CsvWriter csvOutput = new CsvWriter(new FileWriter(file, true), ','); 

     //Create Header for CSV 
     csvOutput.write("Message Source"); 
     csvOutput.write("Message Name"); 
     csvOutput.write("Component"); 
     csvOutput.write("Occurance"); 
     csvOutput.write("Message Payload"); 
     csvOutput.write("Bandwidth (Payload)"); 
     csvOutput.write("Message Payload with Header"); 
     csvOutput.write("Bandwidth (Payload with Header)"); 
     csvOutput.endRecord(); 
     for (Signal signal : messages) { 
      csvOutput.write(signal.getSource()); 
      csvOutput.write(signal.getName()); 
      csvOutput.write(signal.getComponent()); 
      csvOutput.write(Integer.toString(signal.getOccurance())); 
      csvOutput.write(Integer.toString(signal.getSize())); 
      csvOutput.write(Float.toString(signal.getBandwidth())); 
      csvOutput.write(Integer.toString(signal.getSizewithHeader())); 
      csvOutput.write(Float.toString(signal.getBandwidthWithHeader())); 
      csvOutput.endRecord(); 
     } 
     csvOutput.flush(); 
     csvOutput.close(); 

ama 2 kez kodunu 2. bir dosya oluşturulur ve yeni dosya ilk her satır için, yinelenen satırlar içeriyor çalıştırdığınızda sorun artık dosya 2. veride benzer verilerle 2 satır var.

Bazı kaynaklar temizlik değilim mı?

sayesinde bu sütun ne kadar geniş olduğunu bilmek için bir yolu yoktur, çünkü gerçek veri sütunları ile sıraya değil anladığım

+4

Kolonlar virgül ile ayrılmalıdır – tim

+0

her I ("") writer.write yapmalıyım yazma sonra Şunu @tim; – Wearybands

+2

Yapabilirsin - onlar sütun adları eksik ve verilerde görülüyor. Belgenin doğru şekilde biçimlendirilmesi için her bir virgül virgülle sınırlandırılmalıdır. .csv için zaten – tim

cevap

-1

.

Sekmeleri kullanarak deneyin veya (gibi tüm 10 karakter bunları yapmak) her bir sütunun genişliğini önceden tanımlamayı başladı.

+0

Evet, writer.write ("\ t"); '(sekme karakteri) gibi bir şey –

0

Eğer bunun yerine fw.append(","); sizin kodunda yazdım alanlar için Excel'de ayrı Kolon, olmasını istiyorsanız sadece fw.append(";"); İşe yarayacak vermek ve Başlığını ayarlayarak, yerine String f="Id, Name, Salary" gibi bir değişken oluşturmak için ve yöntem fw.append(f); için bu değişkeni geçen Bunun yerine noktalı virgül ile fw.append("Id; Name; Salary") gibi değişken yaratma alanları geçmektedir.

1

bu

csvOutput.write("\""); 
csvOutput.write(signal.getSource()); 
csvOutput.write("\""); 
csvOutput.write(",\"") 
csvOutput.write("\""); 
csvOutput.write(signal.getName() 
csvOutput.write("\""); 

gibi verilerinizi içine gereken bir CSV dosyası yazma Ve verilerin içinde virgül varsa o ayrıştırılırken bir soruna neden ve verilerin neden olacağı için bu yapmanız gereken Farklı sütunlara yerleştirilmelidir. Ayrıca finally bloğu içinde emin olun

finally { 
//csvOutput is closed here 

}