2015-04-27 2 views
2

У меня возникли проблемы с заменой строки в текстовом файле с помощью пользовательского ввода. Всякий раз, когда я пытаюсь заменить строку, все остальные строки в текстовом файле удаляются. Может ли кто-нибудь помочь мне с этой проблемой?Замена строки в файле из сканера

 public static void removedata(String s) throws IOException { 

    File f = new File("data.txt"); 
    File f1 = new File("data2.txt"); 
    BufferedReader input = new BufferedReader(new InputStreamReader(
      System.in)); 
    BufferedReader br = new BufferedReader(new FileReader(f)); 
    PrintWriter pr = new PrintWriter(f1); 
    String line; 

    while ((line = br.readLine()) != null) { 
     if (line.contains(s)) { 

      System.out 
        .println("I see you are trying to update some information... Shall I go ahead?"); 
      String go = input.readLine(); 
      if (go.equals("yes")) { 
       System.out.println("Enter new Text :"); 
       String newText = input.readLine(); 
       line = newText; 
       System.out.println("Thank you, Have a good Day!"); 
       break; 
      } 
      if (go.equals("no")) { 

       System.out.println(line); 
       System.out.println("Have a good day!"); 
       break; 
      } 
     } 

     pr.println(line); 
    } 
    br.close(); 
    pr.close(); 
    input.close(); 
    Files.move(f1.toPath(), f.toPath(), StandardCopyOption.REPLACE_EXISTING); 

} 

А вот мой главный

public static void main(String args[]) throws ParseException, IOException { 
    /* Initialization */ 


    String[] keywords = { "day", "month" }; 
    Scanner in = new Scanner(System.in); 
    Scanner scanner = new Scanner(System.in); 
    String input = null; 

    System.out.println("Welcome"); 
    System.out.println("What would you like to know?"); 

    System.out.print("> "); 
    input = scanner.nextLine().toLowerCase();   

    for (int i = 0; i < keywords.length; i++) { 



      if (input.contains(keywords[i])) { 

      removedata(keywords[i]); 
      } 
    } 

    } 

И мой текстовый файл содержит «день является вторником» и «месяц март». Когда пользователь вводит «день в среду», я хочу заменить старую строку новой строкой. Какие-либо предложения?

+0

Вы не можете напрямую заменить строку из текстового файла. Вы переписали весь файл. –

+0

Ваш ответ уже указан в http://stackoverflow.com/questions/20039980/java-replace-line-in-text-file? – Shervin

+0

Вместо того, чтобы говорить newText = line ... вы пробовали 'replace()'? Кроме того, я уверен, что вам нужно прочитать файл, а затем написать весь файл. – freddiev4

ответ

1

Чтобы заменить текст в текстовом файле, вам необходимо иметь временный файл, в котором вы храните измененный текст. Я думаю, вы на самом деле это сделали, используя f и f1. Но вы использовали break; внутри этого цикла while, поэтому после замены и печати линии цикл останавливается. Я думаю, что все, что вам нужно сделать, это удалить, что break;

0

У вас есть два варианта

  1. прочитать файл, как обычно, пока не дойдете до линии, которую вы ищете, будучи уверенным, чтобы записать все строки в какой-то временный файл. Запишите новую строку в файл temp, а затем продолжите операцию. Теперь замените старый файл на новый файл.

    private void updateFile(String lineToFind, String lineToUse, File f) throws IOException{ 
    File tempFile = new File(f.getAbsolutePath()+".tmp"); 
    try(BufferedReader reader = new BufferedReader(new FileReader(f)); 
    PrintWriter writer = new PrintWriter(new FileWriter(tempFile))) { 
        String line; 
        while ((line = reader.readLine()) != null) { 
         if (line.equals(lineToFind)) { 
          writer.println(lineToUse); 
         } else { 
          writer.println(line); 
         } 
        } 
    } 
    f.delete(); 
    tempFile.renameTo(f); 
    } 
    
  2. RandomAccessFile Используйте для управления содержимым файла. Это намного сложнее и, вероятно, не стоит усилий, но это вариант.

+0

. Вариант 1 - это то, что делает OP в настоящее время ... или пытается это сделать. – Tom

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