将.txt解析为.csv

时间:2014-03-20 07:53:41

标签: java parsing csv

是否可以创建一个Java程序来识别.txt文件中的文本并将其写入.csv文件?如果是的话,你会如何从这个问题开始呢?

我的.txt文件是Text1 | Text 2所以我可以以某种方式获取char“|”并将其分成两个单元格。

6 个答案:

答案 0 :(得分:7)

这在Java 8中非常简单:

public static void main(String[] args) throws Exception {
    final Path path = Paths.get("path", "to", "folder");
    final Path txt = path.resolve("myFile.txt");
    final Path csv = path.resolve("myFile.csv");
    try (
            final Stream<String> lines = Files.lines(txt);
            final PrintWriter pw = new PrintWriter(Files.newBufferedWriter(csv, StandardOpenOption.CREATE_NEW))) {
        lines.map((line) -> line.split("\\|")).
                map((line) -> Stream.of(line).collect(Collectors.joining(","))).
                forEach(pw::println);
    }
}

首先,您可以在Path个对象上获取文件 然后打开PrintWriter到目的地Path

现在,您使用lambdas进行Java 8流处理:

  • Files.lines(txt)流式传输文件中的行
  • map((line) -> line.split("\\|"))将每一行拆分为String[]
  • 上的|
  • map((line) -> Stream.of(line).collect(Collectors.joining(",")))使用String[]
  • 再次加入个人,
  • forEach(pw::println)将新行写入目标文件。

使用import static

    try (
            final Stream<String> lines = Files.lines(txt);
            final PrintWriter pw = new PrintWriter(newBufferedWriter(csv, StandardOpenOption.CREATE_NEW))) {
        lines.map((line) -> line.split("\\|")).
                map((line) -> Stream.of(line).collect(joining(","))).
                forEach(pw::println);
    }

由于Java 8仅在昨天发布,因此这是一个Java 7解决方案:

public static void main(String[] args) throws Exception {
    final Path path = Paths.get("path", "to", "folder");
    final Path txt = path.resolve("myFile.txt");
    final Path csv = path.resolve("myFile.csv");
    final Charset utf8 = Charset.forName("UTF-8");
    try (
            final Scanner scanner = new Scanner(Files.newBufferedReader(txt, utf8));
            final PrintWriter pw = new PrintWriter(Files.newBufferedWriter(csv, utf8, StandardOpenOption.CREATE_NEW))) {
        while (scanner.hasNextLine()) {
            pw.println(scanner.nextLine().replace('|', ','));
        }
    }
}

再次,使用import static

    try (
            final Scanner scanner = new Scanner(newBufferedReader(txt, utf8));
            final PrintWriter pw = new PrintWriter(newBufferedWriter(csv, utf8, StandardOpenOption.CREATE_NEW))) {
        while (scanner.hasNextLine()) {
            pw.println(scanner.nextLine().replace('|', ','));
        }
    }

答案 1 :(得分:2)

是的,这是非常有可能的。 替换|通过,和 把它写到csv

public class NewClass {

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

   String data = "one|two|three|four"+"\n"+
           "one|two|three|four";
   //Use a BufferedReader to read from actual Text file
    String csv = data.replace("|", ",");
    System.out.println(csv);

    PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("MyCSV.csv")));
    out.println(csv);
    out.close();
}
}

输出

run:
one,two,three,four
one,two,three,four
BUILD SUCCESSFUL (total time: 0 seconds)

答案 2 :(得分:0)

首先需要How do I create a Java string from the contents of a file?

然后,您可以利用How to split a string in Java并使用|作为分隔符。

作为最后一步,您可以使用Joiner创建最终String并使用How do I save a String to a text file using Java?存储它。

答案 3 :(得分:0)

是的,这是可能的。要完成您的任务,请阅读Input-OutputStreams

从一个简单的例子开始。从文件中读取一行文本并在控制台上打印出来。 然后以另一种方式执行 - 将一行文本写入文件。

通过这些示例获得的经验将有助于完成您的任务。

答案 4 :(得分:0)

尝试这可能会有所帮助

    public class Test {

    public static void main(String[] args) throws URISyntaxException,
            IOException {

        FileWriter writer = null;
        File file = new File("d:/sample.txt");
        Scanner scan = new Scanner(file);
        File file2 = new File("d:/CSV.csv");
        file.createNewFile();
        writer = new FileWriter(file2);

        while (scan.hasNext()) {
            String csv = scan.nextLine().replace("|", ",");
            System.out.println(csv);
            writer.append(csv);
            writer.append("\n");
            writer.flush();
        }
    }
}

sample.txt的: -

  He|looked|for|a|book.

  He|picked|up|the|book.

答案 5 :(得分:0)

Commons CSV对于处理Java代码中的CSV输出也很有用 - 特别是它可以处理诸如引用之类的问题:

http://commons.apache.org/proper/commons-csv/

此外,公共IO对于简化读/写文件也非常有用:

https://commons.apache.org/proper/commons-io/description.html

HTH