2016-01-25 79 views
0

我希望能夠從文本文件中刪除空行,例如刪除空行:爪哇 - 如何從一個文本文件

Average Monthly Disposable Salary 
1 
Switzerland 
$6,301.73 
2014 

2 
Luxembourg 
$4,479.80 
2014 

3 
Zambia 
$4,330.98 
2014 

- 若要此:

Average Monthly Disposable Salary 
1 
Switzerland 
$6,301.73 
2014 
2 
Luxembourg 
$4,479.80 
2014 
3 
Zambia 
$4,330.98 
2014 

我所有的代碼如下:

public class Driver { 

    public static void main(String[] args) 
    throws Exception { 

     Scanner file = new Scanner(new File("src/data.txt")); 

     PrintWriter write = new PrintWriter("src/data.txt"); 

     while(file.hasNext()) { 
      if (file.next().equals("")) { 
       continue; 
      } else { 
       write.write(file.next()); 
      } 
     } 
     print.close(); 
     file.close(); 

    } 

} 

問題是,一旦我回去再次查看文件,文本文件是空的。

林不知道這是爲什麼這種方式行事,因爲它們都似乎是空白字符,\ n表示換行符

+1

是您的源文件和目標文件相同文件?在這種情況下,您可以在讀取文件之前覆蓋該文件。 – Bartez

+0

關閉printwriter不起作用 –

+0

是的,他們都指向同一個地方 –

回答

2

你的代碼幾乎是正確的,但也有一些缺陷:

  • 您必須使用.nextLine()的代替的.next()
  • 你必須寫同時讀取原始文件時的另一個文件
  • 您的print.close();應該是write.close();
  • 你忘了寫每一行
  • 你不需要後繼續添加新線;指令,因爲它是多餘的。

    public static void main(String[] args) { 
    
         Scanner file; 
         PrintWriter writer; 
    
         try { 
    
          file = new Scanner(new File("src/data.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); 
         } 
    } 
    

如果你想保留原來的名稱,你可以這樣做:

File file1 = new File("src/data.txt"); 
File file2 = new File("src/data2.txt"); 

file1.delete(); 
file2.renameTo(file1); 
1

你可以複製到一個臨時文件並重新命名。

String name = "src/data.txt"; 
try(BufferedWriter bw = new BufferedWriter(name+".tmp)) { 
    Files.lines(Paths.get(name)) 
     .filter(v -> !v.trim().isEmpty()) 
     .forEach(bw::println); 
} 
new File(name+".tmp").renameTo(new File(name)); 
+1

你的意思是Paths.get? –

3

嘗試org.apache.commons.io和Iterator

try 
{ 
    String name = "src/data.txt"; 
    List<String> lines = FileUtils.readLines(new File(name)); 

    Iterator<String> i = lines.iterator(); 
    while (i.hasNext()) 
    { 
     String line = i.next(); 
     if (line.trim().isEmpty()) 
      i.remove(); 
    } 

    FileUtils.writeLines(new File(name), lines); 
} 
catch (IOException e) 
{ 
    e.printStackTrace(); 
}