2017-01-03 165 views
1

元のファイルを新しいファイルに複製しようとしています。新しいファイルでは、元のBUTとまったく同じものが必要ですが、空白の行はありません。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")が「何も印刷しない」と仮定しましたが、実際にはヌルを印刷します。「何も印刷しない」方法はわかりません。

+1

だけの条件ならば、このように変更すると、それが動作する可能性があります。 if(lineOfText.trim()。isEmpty()) – Darshit

+0

また、 "null"を書き込まないで、トリミング後に行が空の場合は何もしないでください。 –

+1

"何も印刷しない"方法は、それは何も印刷します。 – 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(複数可)。テストの前にtrim(コメントに示唆されているように)するのは良い考えです。ループを簡素化することができます。変数の可視性を制限する必要があります。あなたはケースにprintlnをスキップする必要があるすべて一緒

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

、次のような行は空です:

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」はプラットフォーム固有の行末です –

関連する問題