为什么我在 java 中将文本转换为 xls 文件后写入文本时输出偏移

Why I am getting shifted output when write to a text after converting it to xls file in java

我正在将已解析网页的输出写入两个文本文件。 "CrawledURLS.txt" 保存已抓取的页面,"CrawledURLSERROR.txt" 保存未抓取的页面。因为我应该得到一些输出数据图,所以我将 .txt 文件转换为 .xls 文件。我收到了超过“300.000”个 URL。当我停止程序检查输出时,我看到一些列向右移动或包含不正确的信息。

这里是我写输出的地方:

 LinkNode deque(){

    LinkNode link = pQUEUE.poll();
    link.setDequeTime(new DateTime());
    for (LinkNode l : pQUEUE) {
        DateTime start = new DateTime();
        l.setDequeTime(start);
        l.setStartTime(start);

        PingTaskManager.ping(l);
        if(l.getStatus()!= null && l.getStatus().equals(LinkNodeStatus.OK)) {
            try (PrintWriter out = new PrintWriter (new BufferedWriter (new FileWriter("CrawledURLS.txt",true)))){

                l.setEndTime(new DateTime());
                out.println( l.getUrl() + ": "+ l.getWeight() +  " InTime: "+
                Util.formatDate(l.getDequeTime()) + " OutTime: " + Util.formatDate(l.getEnqueTime())+" Waiting duration :" + l.waitingInQueue()
                + "  Processing duration :" + l.linkProcessingDuration() );

             } catch(IOException e){

             }

        }  else {
            try (PrintWriter out = new PrintWriter (new BufferedWriter (new FileWriter("CrawledURLSERROR.txt",true)))){


                l.setEndTime(new DateTime());
                out.println( l.getUrl() + ": "+ l.getWeight() +  " InTime : "+
                Util.formatDate(l.getDequeTime()) + " OutTime : " + Util.formatDate(l.getEnqueTime())+" Waiting duration :" + l.waitingInQueue()
                + "  Processing duration :" + l.linkProcessingDuration() );

             } catch(IOException e){

             }
        }    
    }

    return link;
}

这是我得到的输出:

关于这个问题我有两个问题:

1- 为什么要进行这种损坏?

2- 如何将我的代码转换为使用 .csv 文件而不是 .txt 文件输出?这会解决问题吗?

很有可能写入 CSV 文件会解决这个问题,因为看来问题是 Excel 猜测如何将文本数据放入列中。

请注意,CSV 不是标准。 CSV 格式因程序而异,例如如何引用,是否可以引用换行

因此使用经过调试的 CSV 库,例如 Apache 库 https://commons.apache.org/proper/commons-csv/,并将其设置为 Excel 写入数据。

此外,不要(重新)打开每个输出行一次的输出文件。这可能会导致问题,而且肯定会很慢。相反,打开两个输出文件,向每个文件写入一个 header 行(给出列名),然后遍历数据,添加数据值行,最后关闭文件。

(如果 CSV 引用不能满足您的数据需求,您可以切换到 well-defined 标准,例如 JSON 或 XML。)