簡體   English   中英

使用Filewriter將新文件寫入CSV文件

[英]writing new file using filewriter to csv file

我正在處理具有45312個instance(row)和8個屬性的CSV文件。 我想修改(使用一些數學運算)輸入的csv文件並將其寫入。 要修改CSV,我從每個實例(行)中提取了每個列值(v =“逗號分隔的位置”),然后嘗試對其進行修改。 但是我在這里面臨的問題是,當for循環移至下一個迭代時(例如v = 2的v = 3),那么前一次迭代的所有修改后的實例值(v = 2)都將恢復為原始狀態。 最后,我要處理所有修改的新CSV文件。

    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileWriter;
    import java.io.*; 
    public class Normalization {
     public static void main(String[] args)throws IOException {
            String filename = "abc.csv";
            File file = new File(filename);
            BufferedWriter writer = null;
    try{           
             writer = new BufferedWriter(new   FileWriter("lyupdated.csv"));      
        for (int v = 1; v < 8; v++)
        {
                Scanner inputStream = new Scanner(file);
          while (inputStream.hasNext())
          {
                String data = inputStream.next();         
                String[] values = data.split(",");
                double balance = Double.parseDouble(values[v]);
                balance=balance*10;//for mathoperation code simplification
                values[v] = String.valueOf(balance);      
                // iterate through the values and build a string out of them
                StringBuilder sb = new StringBuilder();
                //  String newData = sb.toString();
               for (int i = 0; i < values.length; i++) {
                        sb.append(values[i]);
                        if (i < values.length - 1) {
                            sb.append(",");
                        }
                    }
          System.out.println(sb.toString());
          writer.write(sb.toString()+"\n");
           }inputStream.close();           
        } writer.close();
     }
          catch (FileNotFoundException ex) {
                Logger.getLogger(Normalization.class.getName()).log(Level.SEVERE, null, ex);
            }
    }
    }

您的代碼沒有多大意義。 您需要打開文件,有一個循環來逐行讀取文件,然后將每行分成8列。

但是,請查看您擁有的內容:

for (int v = 1; v < 8; v++) {
    Scanner inputStream = new Scanner(file);

所以,

  • 您不會遍歷文件的所有行,但會遍歷7列
  • 在這7次迭代中的每一次迭代中,您都在文件上打開一個新的Scanner,因此始終從文件的開頭進行讀取

正如Tom在評論中所說,請使用專用於CSV文件解析和生成的庫。 它具有以下優點:

  • 是正確的
  • 經過許多開發人員的測試,並進行了優化
  • 提供更高級別的API
  • 正確處理值的轉義

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM