我想将文本文件拆分为多个文本文件

时间:2016-10-05 10:44:10

标签: java

嗨我有一些文本文件有一些基于标签的数据,我想分成多个文本文件。

具有以下数据的主文本文件:

==========110CYL067.txt============
<Entity Text>Cornell<Entity Type>Person
<Entity Text>Donna<Entity Type>Person
<Entity Text>Sherry<Entity Type>Person
<Entity Text>Goodwill<Entity Type>Organization
==========110CYL068.txt============
<Entity Text>Goodwill Industries Foundation<Entity Type>Organization
<Entity Text>Goodwill<Entity Type>Organization

注意:这里110CYL068.txt和110CYL067.txt是文本文件。

我想将此文件拆分为110CYL068.txt和110CYL067.txt,依此类推。

这个============模式是固定的。在============ FileName ============

之间

文件名可以是任何东西。任何人都有任何见解。

3 个答案:

答案 0 :(得分:1)

我不想为您编写代码,因此您可以使用BufferedReader或FileReader读取文件。每当看到以=======开头或包含.txt的行时,您都可以使用任何文件编写器创建和写入新文件。 如果遇到那些关闭前一个文件并重复该过程。

答案 1 :(得分:0)

完成ppl方式复杂化只是快速和肮脏。

public static List<String> lines = new ArrayList<String>();
public static String pattern = "==========";

public static void main(String[] args) throws IOException {
    addLines(importFile());

}

private static List<String> importFile() throws FileNotFoundException, IOException {
    BufferedReader br = new BufferedReader(new FileReader("C:\\temp\\test.txt"));
    try {
        StringBuilder sb = new StringBuilder();
        String line = br.readLine();

        while (line != null) {
            lines.add(line.replaceFirst(pattern, ";") + "\n");
            line = br.readLine();
        }

    } finally {
        br.close();
    }
    return lines;
}

private static void addLines(List<String> list) throws IOException {
    String FilesString = list.toString();
    System.out.println(FilesString);
    String[] FilesArray = FilesString.split(";");
    for (String string : FilesArray) {
        createFile(string);
    }
}

private static void createFile(String content) throws IOException {

    String[] Lines = content.replaceAll("=", "").split("\n");
    File file = new File("C:\\temp\\" + Lines[0]);
    file.createNewFile();
    FileWriter writer = new FileWriter(file);
    Lines[0] = null;
    for (String Line : Lines) {

        if (Line != null) {
            writer.append(Line.replace(",", "")+"\n");

        }

    }
    writer.flush();
    writer.close();
}

}

答案 2 :(得分:0)

快速又脏,不使用正则表达式。我并不是真的建议这样做,因为for中的main循环非常混乱并且可能会中断,但将其用于创意可能会有所帮助。

import java.io.*;
import java.util.*;
class splitFiles {

    public static void main(String[] args){

        try {
            List<String> fileRead = readFiles("some.txt");
            for(int i=0; i<fileRead.size(); i++){
                if(fileRead.get(i).charAt(0) == '='){
                    PrintWriter writer = new PrintWriter(getFileName(fileRead.get(i)), "UTF-8");
                    for(int j=i+1; j<fileRead.size(); j++){
                        if(fileRead.get(j).charAt(0) == '='){
                            break;
                        } else {
                            writer.println(fileRead.get(j));
                        }
                    }
                    writer.close();
                }
            }
        } catch (Exception e){

        }

    }

    public static String getFileName(String fileLine){
        String[] split = fileLine.split("=");
        for(String e: split){
            if(e.isEmpty()){
                continue;
            } else {
                return e;
            }
        }
        return "No file name found";
    }

    public static ArrayList<String> readFile(String path){
        try {
            Scanner s = new Scanner(new File(path));
            ArrayList<String> list = new ArrayList<String>();
            while(s.hasNext()){
                list.add(s.next());
            }
            s.close();
            return list;
        } catch (FileNotFoundException f){
            System.out.println("File not found.");
        }
        return null;
    }

    static List<String> readFiles(String fileName) throws IOException {
        List<String> words = new ArrayList<String>();
        BufferedReader reader = new BufferedReader(new FileReader(fileName));
        String line;
        while ((line = reader.readLine()) != null) {
            words.add(line);
        }
        reader.close();
        return words;
    }
}