Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从一个文件生成多个文件_Java_File_Split - Fatal编程技术网

Java 从一个文件生成多个文件

Java 从一个文件生成多个文件,java,file,split,Java,File,Split,我有一个文本文件(制表符分隔,行为新行),有n列。我想在第四列拆分该文件,并为该列的每个不同值生成一个文件 i、 e如果五行有相同的列值,比如X,那么所有这五行都将放在X.txt中,以此类推 在处理结束时,如果第四列中有m个不同的值,我将有m个文件。您可以假设第4列是“日期”类型。所以本质上需要对日期列上的数据进行分区,并生成不同的文件,每个文件都有指定日期的数据 有什么简单的方法吗?一个简单的草稿 public static void main( String[] args) throws I

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

i、 e如果五行有相同的列值,比如X,那么所有这五行都将放在X.txt中,以此类推

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

有什么简单的方法吗?

一个简单的草稿

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();
    }
}
publicstaticvoidmain(字符串[]args)引发IOException{
字符串[]输入={“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 Map=newhashmap();
for(字符串行:输入){
字符串[]cols=row.split(“\t”);
字符串日期=cols[4];
字符串内容=map.get(日期);
content=(content==null)?行:content+“\n”+行;
地图放置(日期、内容);
}
for(字符串文件名:map.keySet()){
FileOutputStream fos=新的FileOutputStream(“c:\\”+文件名);
write(map.get(filename.getBytes());
fos.close();
}
}
注意:您应该使用正确的行分隔符字符和编码


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

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

这是一次性的吗?如果是这样,我建议您使用任何允许基于列选择的文本编辑器。否。这将是一个重复的任务,所以我想为它编写一个java程序。将文件加载到数据库:)并根据需要转储它:)。但在正常情况下,您可以将文件加载到arraylist中,然后创建一个类,该类实现Comparator,并在其中比较行的日期。do
Collections.sort(arraylist,comparatorInstance)然后迭代,然后用它做任何你喜欢的事情。如果你必须做更多和类似的任务,你可以考虑使用FMPP,FMPP是FrimARKER模板引擎的前端,可以根据输入进行OutPutsFrand分割。s