2011-04-27 101 views

回答

4

讀取文件並將其寫入到另一個流並跳過要刪除

1

在一個文件中刪除文本行直接行是不可能的。我們必須將文件讀入內存,刪除文本行並重寫編輯的內容。

+1

儘管當然,整個文件沒有必要放入內存,因爲您可以在同一個循環中讀寫。 – 2011-04-27 07:18:53

+0

@Simon - 同意 - 我們不需要將整個文件存儲在內存中,但是最後,文件的每個字節都被讀取,緩衝在RAM的某處並寫入新的目標文件。 – 2011-04-27 10:21:24

5

沒有魔術去除線條。

  • 複製文件一行一行,沒有你不想要的行。
  • 刪除原始文件。
  • 將副本重命名爲原始文件。
+0

我如何製作和重命名新文件?通過代碼PLease幫助 – user726701 2011-04-29 10:32:27

+0

通過寫入一個不存在的文件來製作一個新文件。你可以添加一個像'.new'這樣的擴展名來創建一個新文件。你可以用'File.rename()'重命名它' – 2011-04-29 14:03:04

2

嘗試讀取文件:

public static String readAllText(String filename) throws Exception { 
    StringBuilder sb = new StringBuilder(); 
    Files.lines(Paths.get(filename)).forEach(sb::append); 
    return sb.toString(); 
} 

從特定的字符,然後拆分文本(新行的 「\ n」)

private String changeFile(){ 
String file = readAllText("file1.txt"); 
String[] arr = file.split("\n"); // every arr items is a line now. 
StringBuilder sb = new StringBuilder(); 
for(String s : arr) 
{ 
    if(s.contains("characterfromlinewillbedeleted")) 
    continue; 
    sb.append(s); //If you want to split with new lines you can use sb.append(s + "\n"); 
} 
return sb.toString(); //new file that does not contains that lines. 
} 

然後將此文件寫入的字符串與新的文件:

public static void writeAllText(String text, String fileout) { 
    try { 
     PrintWriter pw = new PrintWriter(fileout); 
     pw.print(text); 
     pw.close(); 
    } catch (Exception e) { 
     //handle exception here 
    } 
} 


writeAllText(changeFile(),"newfilename.txt"); 
+1

你應該在這裏改變「characterfromlinewillbedeleted」到你的行將被刪除。 – 2014-08-25 10:41:33

0

也許一個搜索方法會做你想做的事,即「search」遇到hod將一個字符串作爲參數並將其搜索到文件中,並替換包含該字符串的行。

PS:

public static void search (String s) 
{ 
    String buffer = ""; 
    try { 

     Scanner scan = new Scanner (new File ("filename.txt")); 
     while (scan.hasNext()) 
     { 
      buffer = scan.nextLine(); 

      String [] splittedLine = buffer.split(" "); 
      if (splittedLine[0].equals(s)) 
      { 

       buffer = ""; 

      } 
      else 
      { 
       //print some message that tells you that the string not found 


      } 
     } 
     scan.close(); 

    } catch (FileNotFoundException e) { 
     System.out.println("An error occured while searching in file!"); 
    } 

} 
0

試試這個代碼。