【问题标题】:Keeping line breaks when reading a file读取文件时保持换行符
【发布时间】:2020-02-14 19:54:41
【问题描述】:

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

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

【问题讨论】:

  • 您希望文件如何被解密?如果您也想加密行终止符,请在加密之前将其添加回来。否则,稍后将其添加回来。如果您不指定此项并且第三方尝试解密文件,则文件可能无法正确解密。

标签: java file printwriter


【解决方案1】:

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

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

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

如果您查看nextLine() 方法的文档,关于为什么它们会“丢失”,它说:

将此扫描器前进到当前行并返回被跳过的输入。此方法返回当前行的其余部分,不包括末尾的任何行分隔符。位置设置为下一行的开头。

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

【讨论】:

    【解决方案2】:

    您一次读取一行输入,这意味着每次读取停止时都会换行。

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

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

    }

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2012-10-15
        • 2018-03-29
        • 2016-05-21
        • 2013-02-09
        • 1970-01-01
        • 2011-09-01
        • 1970-01-01
        • 2019-11-20
        • 1970-01-01
        相关资源
        最近更新 更多