Сохранение разрывов строк при чтении файла - PullRequest
1 голос
/ 14 февраля 2020

Я хочу прочитать файл и изменить его, но каждый раз, когда создается новый файл, все остается на одной строке. Поэтому мой вопрос заключается в том, как сохранить разрывы строк, не удаляя их?

public class JavaProgram {

    public static void main(String[] args) {
        String text = "";
        StringBuilder convert = new StringBuilder();
        Scanner keyboard = new Scanner (System.in);

        File file = new File ("PATH");

            try {
                Scanner input = new Scanner (file);
                while (input.hasNextLine()) {
                        text = input.nextLine();

                        char [] arr = text.toCharArray();
                        char [] newArr = encrypt(3, arr);

                        for (int i = 0; i < newArr.length; i++) {
                            convert.append(newArr[i]);
                } catch (IOException e) {
                    e.printStackTrace(); 
                }
                try {
                    PrintWriter printer = new PrintWriter (document);

                    printer.append(convert);
                    printer.close();

                } catch (IOException e) {
                    e.printStackTrace();
                }

Ответы [ 3 ]

3 голосов
/ 14 февраля 2020

Добавьте разрыв строки в тот момент, когда вы пишете каждую строку. В вашем случае после for l oop, который добавляет зашифрованные символы:

for (int i = 0; i < newArr.length; i++) {
       convert.append(newArr[i]);
convert.append("\r\n");

Добавление новой строки в Java так же просто, как включение «\ n» или «\ r» или « \ r \ n ”в конце нашей строки в зависимости от того, какую SO вы используете. Но в настоящее время файловые редакторы распознают их все, поэтому, возможно, вы не столкнетесь с проблемой, выберете ли вы одну или другую.

И относительно того, почему они «потерялись», если вы посмотрите на документы по методу nextLine() он говорит:

Продвигает этот сканер за пределы текущей строки и возвращает пропущенный ввод. Этот метод возвращает остаток текущей строки, , исключая любой разделитель строк в конце . Позиция установлена ​​в начале следующей строки.

Таким образом, вы должны добавить разделители строк обратно, если они вам нужны.

0 голосов
/ 14 февраля 2020

Вы можете добавить Конец строки \ r \ n :

convert.append("\r\n");

или Разделитель строк :

convert.append(System.lineSeparator());

Итак, это редактирование вашего кода:

public static void main(String[] args) {

    String text = "";
    StringBuilder convert = new StringBuilder();
    Scanner keyboard = new Scanner (System.in);

    File file = new File ("C:\\document.txt");

    try {
        Scanner input = new Scanner (file);
        while (input.hasNextLine()) {
            text = input.nextLine();

            char [] arr = text.toCharArray();
            char [] newArr = arr;

            for (int i = 0; i < newArr.length; i++) {
                convert.append(newArr[i]);
            }

           // use this:
            convert.append(System.lineSeparator());
           // Or this:
            convert.append("\r\n");
        }

    } catch (IOException e) {
        e.printStackTrace(); 
    }

    try {
        // write file
        PrintWriter printer = new PrintWriter("C:\\My New File.txt");

        printer.append(convert);
        printer.close();

    } catch (IOException e) {
        e.printStackTrace();
    }
}
0 голосов
/ 14 февраля 2020

Вы читаете ввод по одной строке за раз, что неявно означает, что у вас есть разрыв строки каждый раз, когда ваше чтение останавливается.

Поэтому каждый раз, когда вы пишете сохраненный буфер, пишите новую строку.

try {
Scanner input = new Scanner (file);
while (input.hasNextLine()) {
    text = input.nextLine();

    char [] arr = text.toCharArray();
    char [] newArr = encrypt(3, arr);

    for (int i = 0; i < newArr.length; i++) {
        convert.append(newArr[i]);
        convert.append(System.lineSeparator());
    } catch (IOException e) {
        e.printStackTrace(); 

}

...