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

我正在将parsing的网页输出写入两个文本文件。 “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输出? 那会解决问题吗?

这是一个很好的select,编写CSV文件将解决这个问题,因为它出现的问题是Excel猜测如何把你的文本数据列。

请注意,CSV不是一个标准。 CSV格式在不同的程序中有所不同,例如,如何引用以及是否可以引用换行符。

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

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

(如果CSV引用不足以满足您的数据,则可以切换到定义良好的标准,如JSON或XML。)