从一个文件生成多个文件

时间:2012-02-10 09:08:34

标签: java file split

我有一个文本文件(标签分隔,行的新行)有n列。我想在第四列拆分该文件,并为该列的每个不同值生成一个文件。

即如果五行具有相同的列值,则表示X,所有这五行都将以x.txt开头,依此类推。

在处理结束时,如果第四列中有m个不同的值,我将有m个文件。您可以假设第4列是“日期”类型。因此,基本上需要在日期列上对数据进行分区,并生成不同的文件,每个文件都包含指定日期的数据。

有没有简单的方法呢?

2 个答案:

答案 0 :(得分:1)

一个简单的草案

public static void main( String[] args) throws IOException {
    String[] input = {"A1\tB\tC\tD\t2012-02-10",
        "A2\tB\tC\tD\t2012-02-10",
        "A3\tB\tC\tD\t2012-02-08",
        "A4\tB\tC\tD\t2012-02-08",
        "A5\t\tC\tD\t2012-02-07",
        "A6\tB\tC\tD\t2012-02-07" };

    Map<String,String> map = new  HashMap<String, String>();
    for ( String row : input ) {
        String[] cols = row.split( "\t" );
        String date = cols[4];
        String content = map.get( date );
        content = (content == null) ? row : content + "\n" + row;
        map.put( date, content );
    }
    for ( String filename : map.keySet() ) {
        FileOutputStream fos = new FileOutputStream("c:\\" + filename );
        fos.write( map.get( filename ).getBytes() );
        fos.close();
    }
}

注意:您应该使用正确的行分隔符char和编码。

要阅读输入,您可以使用libcsv

答案 1 :(得分:0)

在堆栈器提供的解决方案中,您可以使用java.util.Scanner来读取输入文件,如下所示:

Scanner scanner = new Scanner(new File("YourFilePath"));
while (scanner.hasNextLine())
{
     String row = scanner.nextLine();
     .......
}