Обратный порядок строк в текстовом файле - PullRequest
1 голос
/ 19 января 2020

Мне нужно импортировать текстовый файл и экспортировать текстовый файл со строками в обратном порядке

Пример ввода:

abc

123

First line

Ожидаемый вывод:

First line 

123

abc

Это то, что я имею до сих пор. Он переворачивает линии, но не порядок строк. Любая помощь будет оценена

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;

public class reversetext {

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

            File sourceFile = new File("in.txt");//input File Path
            File outFile = new File("out.txt");//out put file path

            Scanner content = new Scanner(sourceFile);
            PrintWriter pwriter = new PrintWriter(outFile);

            while(content.hasNextLine()) {
                String s = content.nextLine();
                StringBuffer buffer = new StringBuffer(s);
                buffer = buffer.reverse();
                String rs = buffer.toString();
                pwriter.println(rs);
            }
            content.close();    
            pwriter.close();
        }
        catch(Exception e) {
              System.out.println("Something went wrong");
        }
    }
}

1 Ответ

1 голос
/ 19 января 2020

Самый простой ответ, который я могу придумать, используя Java 7+ и не опираясь на устаревшие строительные блоки, такие как Stack, следующий:

private static final String INPUT_FILE = "input.txt";
private static final String OUTPUT_FILE = "output.txt";
private static final String USER_HOME = System.getProperty("user.home");

public static void main(String... args) {
    try {
        try (PrintWriter writer = new PrintWriter(Files.newBufferedWriter(Paths.get(USER_HOME + "/" + OUTPUT_FILE)))) {
            Files
             .lines(Paths.get(USER_HOME + "/" + INPUT_FILE))
             .collect(Collectors.toCollection(LinkedList::new))
             .descendingIterator()
             .forEachRemaining(writer::println);
        }
    } catch (Exception e) {
        e.printStackTrace();
        System.exit(1);
    }

}

Просто прочитайте во входном файле и получите поток его содержимого в String (Files#lines). Затем соберите их в LinkedList, используя нисходящий итератор, l oop поверх них и запишите их в выходной файл.

...