Parse .txt to .csv

前端 未结 6 898
说谎
说谎 2020-12-21 06:56

Is it possible to create a Java program which recognizes the text in a .txt file and write it in a .csv file? If yes,how would you start with such a problem?

My .txt

相关标签:
6条回答
  • 2020-12-21 07:02

    try this may help

        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.
    
    0 讨论(0)
  • 2020-12-21 07:17

    Yes it is possible. To accomplish your task read about Input- and OutputStreams.

    Start with a simple example. Read a line of text from a file and print it out on the console. Then do it the other way - write a line of text into a file.

    The experience you get through these examples will help to accomplish your task.

    0 讨论(0)
  • 2020-12-21 07:18

    Yes it is very much possible. Replace | by , and write it to a 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();
    }
    }
    

    Output

    run:
    one,two,three,four
    one,two,three,four
    BUILD SUCCESSFUL (total time: 0 seconds)
    
    0 讨论(0)
  • 2020-12-21 07:20

    You first need to How do I create a Java string from the contents of a file?.

    Then you can take advantage of How to split a string in Java and use | as the delimiter.

    As the last step you can use the Joiner to create the final String and store it using How do I save a String to a text file using Java?.

    0 讨论(0)
  • 2020-12-21 07:20

    Commons CSV is useful for handling CSV output in your Java code too - in particular it takes care of gotchas such as quoting, etc:

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

    Also commons IO is really useful for simplifying reading/writing files too:

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

    HTH

    0 讨论(0)
  • This is very simple in 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);
        }
    }
    

    First you get your files at Path objects.
    Then you open a PrintWriter to your destination Path.

    Now you do some Java 8 stream processing with lambdas:

    • Files.lines(txt) streams the lines from the file
    • map((line) -> line.split("\\|")) splits each line to a String[] on |
    • map((line) -> Stream.of(line).collect(Collectors.joining(","))) joins the individual String[] again using ,
    • forEach(pw::println) writes the new lines to the destination file.

    Using 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);
        }
    

    As Java 8 was released only yesterday here is a Java 7 solution:

    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('|', ','));
            }
        }
    }
    

    Again, with 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('|', ','));
            }
        }
    
    0 讨论(0)
提交回复
热议问题