2013-12-24 3 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.write» после того, как вы уже «bw.close();». Далее, в общем - зачем вы хотели бы сделать что-нибудь подобное? если вы уже знаете, что хотите изменить - пишите один раз в файл! (вместо того, чтобы писать, читать и переписывать) – alfasin

+0

Это corect, я изменил и работал как-то. Проверьте мой последний комментарий из нижней части страницы, пожалуйста :). Спасибо, в любом случае. –

ответ

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() дважды, который провоцирующий приложение для чтения line1, а затем line2 и в вашем случае у вас есть только одна строка, которая означает, что ваш программа читает его в условной форме и когда дело доходит до объявления его переменной 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

Добро пожаловать в переполнение стека! Хотя этот ответ, вероятно, правильный и полезный, рекомендуется, если вы [включите какое-то объяснение вместе с ним] (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);, потому что это будет просто распечатать заявление дважды.
Что бы вы ни хотели в файле, просто укажите правильный путь к файлу и соответствующим образом используйте приведенный выше код.

Смежные вопросы