在csv文件中写入超过65535行

时间:2014-12-04 22:43:10

标签: java csv

  

[更新]问题不同,csv文件格式没什么。题   将是“使用File Writer编写csv文件的最后几条记录   不见了。

在我的java应用程序中,我需要在csv文件中追加超过65535行。但它只在一张纸上写入65535行。我没有使用任何库。一些最终记录丢失。如何解决这个问题..........

public void writeSubmission(){
        try {
            writer = new FileWriter("res/sample.csv");
            writer.append("PhraseId");
            writer.append(',');
            writer.append("Sentiment");
            writer.append('\n');
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

public void readTestData(){
        String path="res/test.tsv"; 
        Calculation cal=new Calculation();
        int counter=0;
        try {
            BufferedReader bReader = new BufferedReader(new FileReader(path));
            String line;
            writeSubmission();
            bReader.readLine();
            while ((line = bReader.readLine()) != null) {
                String datavalue[] = line.split("\t");
                writer.append(datavalue[0]);
                writer.append(',');

                try {
                    double value=cal.calculate(datavalue[2]);
                    System.out.println(value);
                    String val;
                    if(value<-0.4)
                    {
                        val="0";
                    }
                    else if(value>-0.4 && value<-0.1)
                    {
                        val="1";
                    }
                    else if(value>-0.1 && value<+0.1)
                    {
                        val="2";
                    }
                    else if(value>+0.1 && value<+0.40)
                    {
                        val="3";
                    }
                    else{
                        val="4";
                    }
                    counter++;
                    writer.append(val);
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    System.out.println(e);
                }
                writer.append('\n');

            }
            System.out.println(counter);
            bReader.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            System.out.println(e);
        } catch (IOException e){
            e.printStackTrace();
            System.out.println(e);
        }

    }

2 个答案:

答案 0 :(得分:3)

我认为您的问题可能是,您在另一端打开CSV的工具并不需要超过65535行,而不是Java&#39;做错了什么。它几乎可以肯定是另一端的错误,而不是你的Java代码。 (例如,FileWriter根本不关心65535行。)

例如,如果您使用的是Excel 2003,则会看到此问题:How to get around 64k row limit in Excel

答案 1 :(得分:0)

最后我修复了错误。在代码推送现有流后使用.File Writer应该是flush。或者close作者自动flushclose

  

flush方法刷新输出流并强制任何缓冲   要写出的输出字节。冲洗的一般合同是   调用它表示,如果以前写过的字节有   由输出流的实现缓冲,这样的字节   应立即写入预定的目的地。

writer = new FileWriter("res/sample.csv");
writer.flush();
writer.close();