2016-11-30 100 views
-2

尝试从Java文件中读取数据并将其写入csv文件时遇到问题。我设置了一个ArrayList变量'data',使用Scanner从数据文件中读取行。问题出现在数据被读取并打印在这一行时:System.out.println(line);从文件中读取文件并写入Java文件时遇到问题

它出来是这样的:

[Tim] 
[Tim] 
[March] 
[Tim] 
[March] 
[11751 N River Dr] 
[Tim] 
[March] 
[11751 N River Dr] 
[Apt 4] 
[Tim] 
[March] 
[11751 N River Dr] 
[Apt 4] 
[Mankato] 
[Tim] 
[March] 
[11751 N River Dr] 
[Apt 4] 
[Mankato] 
[MN] 
[Tim] 
[March] 
[11751 N River Dr] 
[Apt 4] 
[Mankato] 
[MN] 
[56001] 

当文件看起来就像这样:

[Tim] 
[March] 
[11751 N River Dr] 
[Apt 4] 
[Mankato] 
[MN] 
[56001] 

是否有一个原因,它是印刷线路有点不正常?我是否需要在某处添加一个循环来打印主线?我的第二个问题是,当我尝试将该文件编写为CSV文件时,我遇到了打印最后一行(56001)而不是其他任何行的问题。有没有我失踪的事情来做到这一点?这是迄今为止的代码。

import java.util.*; 
import java.io.*; 
public class ReadFromDat { 

/** 
* @param <Data> 
* @param args 
*/ 
    public static ArrayList<String> data; 
    public static void main(String[] args) throws IOException { 
    // TODO Auto-generated method stub 
    @SuppressWarnings("resource") 
    Scanner sc = new Scanner(new File("C:\\Users\\Tim\\Desktop\\data.dat")); 
    data= new ArrayList<String>(); 
    List<String> line = null; 
    while (sc.hasNextLine()){ 
     data.add(sc.nextLine()); 
     for (String lines: data) { 
      line = new ArrayList<String>(Arrays.asList(lines.split("\n"))); 
      System.out.println(line); 
     } 
     //line = Arrays.asList(data.split("\n")); 
     //System.out.println(data); 
     FileWriter output = new FileWriter("C:\\Users\\Tim\\Desktop\\data.csv"); 
     for (String data: line) { 
      output.write(data); 
     } 
     output.close(); 

    } 

    } 

} 
+2

[了解如何调试。](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/) – shmosel

回答

0

您正在循环的每次迭代中重新打开输出文件。 FileWriter默认覆盖,这就是为什么你的输出文件只有一行。

您需要将FileWriter移出循环。