2017-01-03 347 views
1

我想将原始文件复制到新文件中。在新文件中,我想要与原始完全相同的东西,但没有空白行。如何从java中的文本文件中删除空行

注:我看了看其他的职位,没有成功尝试。

目前:

1 

2 

3 

如何我希望它是: - 没有空行

1 
2 
3 

这里是我到目前为止的代码:

inputFileName = "x.txt"; 
    outputFileName = "y.txt"; 

    inputFile = new BufferedReader(new FileReader(inputFileName)); 
    outputFile = new PrintWriter(new FileWriter(outputFileName)); 

    String lineOfText = inputFile.readLine(); 

    while(lineOfText != null) 
    { 
     if (lineOfText.isEmpty()) 
     { 
     outputFile.print("null"); 
     } 

     outputFile.println(lineOfText); 
     lineOfText = inputFile.readLine(); 
    } 

    inputFile.close(); 
    outputFile.close(); 
} 

感谢所有可能帮助的人。我认为print("null")会打印出'没有',但它确实打印出null,我不知道如何打印出'没有'。

+1

只是改变,如果情况是这样,它可能工作。 如果(lineOfText.trim()的isEmpty()) – Darshit

+0

也不要写“空”,只是如果该行微调 –

+1

的方法来“打印无”是_not执行语句后的空没有做任何事情打印任何东西_。 – ajb

回答

0

你在正确的轨道上,但是这

while(lineOfText != null) 
{ 
    if (lineOfText.isEmpty()) 
    { 
    outputFile.print("null"); 
    } 
    outputFile.println(lineOfText); 
    lineOfText = inputFile.readLine(); 
} 

不应该在空行写null。我想你想要的东西,像

while(lineOfText != null) 
{ 
    if (!lineOfText.isEmpty()) 
    { 
     outputFile.println(lineOfText); 
    } 
    lineOfText = inputFile.readLine(); 
} 

此外,我建议你使用一个try-with-resources Statement而不是手动管理您的close(S)。在测试之前对trim(如评论中所建议的)可能是一个好主意,并且您可以简化您的循环并且您应该限制可变的可见性。总之喜欢,

String inputFileName = "x.txt"; 
String outputFileName = "y.txt"; 

try (BufferedReader inputFile = new BufferedReader(new FileReader(inputFileName)); 
     PrintWriter outputFile = new PrintWriter(new FileWriter(outputFileName))) { 
    String lineOfText; 
    while ((lineOfText = inputFile.readLine()) != null) { 
     lineOfText = lineOfText.trim(); 
     if (!lineOfText.isEmpty()) { 
      outputFile.println(lineOfText); 
     } 
    } 
} 
+0

这工作!谢谢!有没有办法删除现在出现在文件最后一行的空行? (这是现在唯一的空白行) – ChosenForWorlds

+0

@ChosenForWorlds根据您的平台,最终的EOL可能是必需的,最终可能不会被视为空白行。所以为了保持平台独立性,通常最好包含最后的EOL。 Java会忽略它,并且在用readLine读回文件时,不会在最后返回空行。 –

1

您需要跳过println的情况下,该行是空:

while(lineOfText != null) 
{ 
    if (!lineOfText.isEmpty()) { 
     outputFile.println(lineOfText); 
    } 
    lineOfText = inputFile.readLine(); 
} 
+0

如果他的lineOfText =“”比得到这种类型的值比lineOfText.isEmpty()返回false。所以,我认为你应该添加lineOfText .trim()。isEmpty()。 – Darshit

+0

@Darshit:当然,取决于作者所称的空白。在这种情况下,值得一看apache StringUtils.isBlank() - https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#isBlank-java。 lang.CharSequence- –

-1
public static void main(String[] args) { 

     Scanner file; 
     PrintWriter writer; 

     try { 

      file = new Scanner(new File("src/data1.txt")); 
      writer = new PrintWriter("src/data2.txt"); 

      while (file.hasNext()) { 
       String line = file.nextLine(); 
       if (!line.isEmpty()) { 
        writer.write(line); 
        writer.write("\n"); 
       } 
      } 

      file.close(); 
      writer.close(); 

     } catch (FileNotFoundException ex) { 
      Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex); 
     } 
} 
+0

“\ n”是特定于平台的行结尾 –