读取文件时保留换行符

Keeping line breaks when reading a file

我想读取一个文件并对其进行修改,但是每当创建新文件时,所有内容都停留在一行上。因此,我的问题是如何在不删除换行符的情况下保留换行符?

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

在你写每一行的时候添加换行符。 在您的情况下,是在附加加密字符的 for 循环之后:

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

在 Java 中添加新行就像在字符串末尾添加“\n”或“\r”或“\r\n”一样简单,具体取决于您使用的 SO .但是现在的文件编辑器都可以识别它们,所以无论你选择一个还是另一个可能都不是问题。

关于为什么它们是 'lost',如果您查看 nextLine() 方法的文档,它会说:

Advances this scanner past the current line and returns the input that was skipped. This method returns the rest of the current line, excluding any line separator at the end. The position is set to the beginning of the next line.

因此,如果需要,您必须重新添加行分隔符。

您正在一次读取一行输入,这意味着每次读取停止时您都有一个换行符。

所以每次你写一个保存的缓冲区,写出一个换行符。

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(); 

}

您可以添加行尾 \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();
    }
}