2013-12-24 84 views
6

比方說,我有以下代碼:創建,使用Java語言編寫和編輯同一個文本文件

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 

public class EditFile { 

    public static void main(String[] args) { 

     try{ 
      String verify, putData; 
      File file = new File("file.txt"); 
      file.createNewFile(); 
      FileWriter fw = new FileWriter(file); 
      BufferedWriter bw = new BufferedWriter(fw); 
      bw.write("Some text here for a reason"); 
      bw.flush(); 
      bw.close(); 
      FileReader fr = new FileReader(file); 
      BufferedReader br = new BufferedReader(fr); 
      while(br.readLine() != null){ 
       verify = br.readLine(); 
       if(verify != null){ 
        putData = verify.replaceAll("here", "there"); 
        bw.write(putData); 
       } 
      } 
      br.close(); 


     }catch(IOException e){ 
     e.printStackTrace(); 
     } 
    } 

} 

所有我想做的事是寫在一個文本文件的東西,在我的情況下,「一些文本這裏一個原因」。然後從我的文件中讀取數據,最後從「某些文本出於某種原因」中的「某些文本出於某種原因」在我的文件中更改我的文本。我運行了代碼,但它發生的只是在我的文件中寫入「某些文本出於某種原因」。

我試圖弄清楚我的代碼中可能出現了什麼問題,但不幸的是這是徒勞的。任何建議或重寫是高度讚賞從我。

+0

問題是你無法從文件中讀取? –

+1

你試圖做的事情沒有意義 - 你已經在'bw.close();'之後嘗試'bw.write'。此外,一般來說 - 你爲什麼要這樣做?如果你已經知道你想改變什麼 - 寫一次文件! (而不是寫作,閱讀和重寫) – alfasin

+0

它的核心,我修改了它,並以某種方式工作。請檢查我從頁面底部的最後評論:)。無論如何,謝謝。 –

回答

6

你的代碼更改爲:

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 

public class EditFile { 

    public static void main(String[] args) { 

     try{ 
      String verify, putData; 
      File file = new File("file.txt"); 
      file.createNewFile(); 
      FileWriter fw = new FileWriter(file); 
      BufferedWriter bw = new BufferedWriter(fw); 
      bw.write("Some text here for a reason"); 
      bw.flush(); 
      bw.close(); 
      FileReader fr = new FileReader(file); 
      BufferedReader br = new BufferedReader(fr); 

      while((verify=br.readLine()) != null){ //***editted 
         //**deleted**verify = br.readLine();** 
       if(verify != null){ //***edited 
        putData = verify.replaceAll("here", "there"); 
        bw.write(putData); 
       } 
      } 
      br.close(); 


     }catch(IOException e){ 
     e.printStackTrace(); 
     } 
    } 

} 

的問題是,你在呼喚br.readLine()兩次被激怒應用程序讀取一號線,然後2號線,並在你的情況你只有一條線,這意味着你的程序以條件形式讀取它,並且在將其聲明爲變量verify時,程序正在停止,因爲您沒有數據來讀取文件。

+1

有一些朦朧的細節:其一是bw.close()必須放在br.close()之前。因此,在我的文件中這樣做,我得到:「這裏的一些文本的原因有一些原因在那裏的原因」。但是,我想要做的是用「在那裏」替換「在這裏」。所以,我只想從文件「某些文本出於某種原因」刪除,並且只有「某些文本出於某種原因」。謝謝。 –

1

我會做這種方式:

import java.io.*; 

public class EditFile { 

public static void main(String[] args) { 

    try{ 
     String verify, putData; 
     File file = new File("file.txt"); 
     file.createNewFile(); 
     FileWriter fw = new FileWriter(file); 
     BufferedWriter bw = new BufferedWriter(fw); 
     bw.write("Some text here for a reason"); 
     bw.flush(); 

     FileReader fr = new FileReader(file); 
     BufferedReader br = new BufferedReader(fr); 

     while((verify=br.readLine()) != null) 
     { 
      if(verify != null) 
      { 
       putData = verify.replaceAll("here", "there"); 
       bw.write(putData); 
      } 
     } 
     br.close(); 
     bw.close(); 

    }catch(IOException e){ 
    e.printStackTrace(); 
    } 
} 
} 
0

使用此代碼,我用它來刪除日誌和System.out的語句在Java文件。 只是改變匹配和替換字符串。

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Scanner; 

public class FileReplace { 
    List<String> lines = new ArrayList<String>(); 
    String line = null; 
    Scanner scan = null; 

    public void doIt() { 
     scan = new Scanner(System.in); 

     while (true) { 
      try { 

       System.out 
         .println("enter qualified file name ex.D:\\shiv\\shiv android all\\Main work space\\Welcomescreen1.java"); 
       String path = scan.nextLine(); 
       File f1 = new File(path); 
       FileReader fr = new FileReader(f1); 
       BufferedReader br = new BufferedReader(fr); 
       int i = 0; 
       while ((line = br.readLine()) != null) { 
        if (line.contains("System.out")) { 
         line = line.replace("System.out", "//"); 
        } else if (line.contains("Log.")) { 
         line = line.replace("Log", "//"); 
        } 

        lines.add(i, line); 
        i++; 
       } 
       fr.close(); 
       br.close(); 

       FileWriter fw = new FileWriter(f1); 
       BufferedWriter out = new BufferedWriter(fw); 
       for (int j = 0; j < lines.size(); j++) { 
        System.out.println(j + "." + lines.get(j)); 
        out.append(lines.get(j)); 
        out.newLine(); 
       } 

       out.flush(); 
       out.close(); 

       System.out 
         .println("====================work done==================="); 

      } catch (Exception ex) { 
       ex.printStackTrace(); 
      } 

     } 

    } 

    public static void main(String args[]) { 

     FileReplace fr = new FileReplace(); 

     fr.doIt(); 

    } 
} 
-1
 File file = new File("/tmp/my.txt"); 
     FileWriter fw; 
     BufferedReader br; 
     BufferedWriter bw; 
     boolean no=false; 
     String line; 
     String data=""; 
     String lessonPath="my new line"; 

    try { 
    if(!file.exists()){ 
     fw = new FileWriter(file); 
     bw = new BufferedWriter(fw); 
     bw.write(lessonPath); 
     bw.flush(); 
     bw.close(); 

    }else{ 

     br = new BufferedReader(new FileReader(file)); 


     while((line =br.readLine()) !=null){ 
      if(!no){ 
      data=line; 
      no=true; 
      }else{ 
       data = data+"\n"+line; 
      } 
     } 
     bw = new BufferedWriter(new FileWriter(file)); 
     bw.write(data+"\n"+lessonPath); 
     bw.flush(); 
     bw.close(); 

    }  

    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
+0

歡迎來到Stack Overflow!雖然這個答案可能是正確和有用的,但如果你[包括一些解釋一起](http://meta.stackexchange.com/q/114762/159034)來解釋它是如何幫助解決這個問題的話,它是首選。如果存在導致其停止工作並且用戶需要了解其曾經工作的變化(可能不相關),這在未來變得特別有用。謝謝! – Hatchet

0
import java.io.*; 

public class TextFile 
{ 
    public static void main(String[] args) 
    { 
     try 
     { 
      String verify, putData; 
      File file = new File("G:\\Dairy.txt"); 
      file.createNewFile(); 
      FileWriter fw = new FileWriter(file); 
      BufferedWriter bw = new BufferedWriter(fw); 
      bw.write("I am Shah Khalid"); 
      bw.flush(); 

      FileReader fr = new FileReader(file); 
      BufferedReader br = new BufferedReader(fr); 

      while((verify=br.readLine()) != null) 
      { 
       if(verify != null) 
       { 
        putData = verify.replaceAll("here", "there"); 
        //bw.write(putData); 
       } 
      } 
      br.close(); 
      bw.close(); 
     } 
     catch(IOException e) 
     { 
      e.printStackTrace(); 
     } 
     System.out.println("Shah"); 
    } 
} 

無需輸入bw.write(putData);,因爲這將只打印語句的兩倍。
無論你想在一個文件中,只要給出正確的文件路徑,並相應地使用上面的代碼。