Java 代码删除新行

Java Code removing new line

我正在编写 java 代码以从命令行参数传递的文本文件中删除多余的空格。 此代码成功运行,但它也从每一行中删除了 \n。 有人可以告诉我发生这种情况的原因以及解决此问题的方法吗?

这是代码

import java.io.*;

//remove extra spaces from a file

class q3
{
    public static void main(String args[]) throws IOException
    {
        File ff=new File(args[0]);
        if(!ff.exists())
        {
            System.out.println("Source file not found");
            System.exit(0);
        }

        File t=new File("temp.txt");
        t.createNewFile();

        FileInputStream fis=new FileInputStream(ff);
        FileOutputStream fos=new FileOutputStream(t);

      int ch,spaces=0,nn=0;

      while((ch=fis.read())!=-1)
      {
          if(ch=='\n')
              nn++;

          if(Character.isWhitespace(ch))
          {
              spaces++;
          }
          else{
             if(spaces>=1)
            { spaces=0;
                fos.write(' ');
                fos.write(ch);}
            else {  fos.write(ch) ;  }
        }
      }

      fis.close();
      fos.close();

        ff.delete();

        if(t.renameTo(ff))
            System.out.println("Program Execution Successful, having "+(1+nn)+ " lines");

    }

}

if(Character.isWhitespace(ch))
{
    spaces++;
}
else{
if(spaces>=1)
{ spaces=0;
fos.write(' ');
fos.write(ch);}

在您的代码中确保您将所有白色 space 字符压缩为一个 space。换行符被视为白色 space 字符,因此您也可以跳过它们。

如果您不想将换行符与另一个白色分组space,在这种情况下,快速修复是修改行

if(Character.isWhitespace(ch))

if(Character.isWhitespace(ch) && ch != '\n')

更好的方法是逐行读入输入,然后逐行写出。您可以使用(例如)http://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html#readLine-- and http://docs.oracle.com/javase/7/docs/api/java/io/BufferedWriter.html#newLine()(在写出行之后)。这样您的实现不依赖于特定于系统的行分隔符(即,其他系统可以使用不同的字符来结束一行而不是 \n)。