2014-02-07 2 views
2

Итак, я просмотрел почти все предложения на этом форуме до сих пор, и никто из них не может действительно помочь мне в ответе, который мне нужен.Изменение определенной строки в файле от другого

Вот мой основной код: Я не использовал орудия, так как это прекрасно работает.

public class Management { 
    private static int Price1 = 0; 
    private static int Price2 = 0; 

    public static void main(String[] args) { 
     try 
     { 
      Scanner file = new Scanner(new File("friendsfile")); 
      String s; 

      while(file.hasNext()) 
      { 
       s = file.nextLine(); 
       if(s.contains("House 1")) 
       { 
        Price1 = getPrice(s); 
       } 

       if(s.contains("House 2")) 
       { 
        Price2 = getPrice(s); 
       } 
      } 
      Filewriter fw = new Filewriter(); 
      fw.fileWriter(Price1,Price2); 
     } 
     catch(FileNotFoundException fnfe) 
     { 
      System.out.println("File not found"); 
     } 
     catch(Exception e) 
     { 
      System.out.println("HERE IS AN ERROR MATE!"); 
     } 
    } 

    private static int getPrice(String s) 
    { 
     StringTokenizer st = new StringTokenizer(s,";"); 

     st.nextToken(); 
     int price1 = Integer.parseInt(st.nextToken().replace(" ","")); 
     return price1; 
    } 
} 

Теперь FileWriter выглядит следующим образом:

public class Filewriter { 

    public static void fileWriter(int price1, int price2) 
    { 
     System.out.println("Ye"); 
     final String FILE_PATH = "housesfile"; 
     final String MARKER_LINE1 = "price1"; 
     final String TEXT_TO_ADD1 = "price1: "+price1; 
     final String MARKER_LINE2 = "price2"; 
     final String TEXT_TO_ADD2 = "price2: "+price2; 

     List<String> fileLines = new ArrayList<String>(); 
     Scanner scanner = null; 
     try { 
      scanner = new Scanner(new File(FILE_PATH)); 
      while (scanner.hasNextLine()) { 
       String line = scanner.nextLine(); 
       fileLines.add(line); 
       if (line.trim().equalsIgnoreCase(MARKER_LINE1)) { 
        fileLines.add(TEXT_TO_ADD1); 
       } 
       if (line.trim().equalsIgnoreCase(MARKER_LINE2)) { 
        fileLines.add(TEXT_TO_ADD2); 
       } 
      } 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } finally { 
      if (scanner != null) { 
       scanner.close(); 
      } 
     } 

     PrintWriter pw = null; 
     try { 
      pw = new PrintWriter(new File(FILE_PATH)); 
      for (String line : fileLines) { 
       pw.println(line); 
      } 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } finally { 
      if (pw != null) { 
       pw.close(); 
      } 
     } 
    } 

} 

В основном я хочу:

House 1: price; 520592 
House 2: price; 342038 

Эти цифры цен из одного файла, преобразованные в этот файл, который является еще один.

house #1 
owner: -NAME- 
price1: 500000 
info: 3 bedrooms, 3 bathrooms. 
last changed: - DATE - 
rented: no 

house #2 
owner: -NAME- 
price2: 150000 
info: 3 bedroom, 3 bathroom. 
last changed: -date- 
rented: no 

Теперь, это ничего не меняет в файле, почему это так? Пожалуйста помоги.

ответ

0

Это потому, что вы используете equalsIgnoreCase() в своем классе Filewriter и сравниваете его с price1, price2. Однако ваш файл имеет значения, такие как price1: 500000.

Следовательно, измените equalsIgnoreCase() на , и он должен работать.

Лучше, изменить как для нижних или верхних случаях а затем матч: line.trim().toLowerCase().contains(MARKER_LINE1.toLowerCase())

Таким образом, вы в то время как цикл в классе FILEWRITE будет:

while (scanner.hasNextLine()) { 
    String line = scanner.nextLine(); 
    fileLines.add(line); 
    if (line.trim().toLowerCase().contains(MARKER_LINE1.toLowerCase())) { 
     fileLines.add(TEXT_TO_ADD1); 
    } 
    if (line.trim().toLowerCase().contains(MARKER_LINE2.toLowerCase())) { 
     fileLines.add(TEXT_TO_ADD2); 
    } 
} 

EDIT: Пробовал и ваш код работает, за исключением того, что он также включает ранее добавленные значения price1, price2, которые y ou может хотеть исключить/перезаписать (в измененных операциях if выше):

house #1 
owner: -NAME- 
price1: 500000 
price1: 520592 
info: 3 bedrooms, 3 bathrooms. 
last changed: - DATE - 
rented: no 

house #2 
owner: -NAME- 
price2: 150000 
price2: 342038 
info: 3 bedroom, 3 bathroom. 
last changed: -date- 
rented: no 
+1

Большое вам спасибо, что сработало отлично! Я только что добавил это: if (line.trim(). ToLowerCase(). Содержит (MARKER_LINE1.toLowerCase())) { fileLines.remove (line); fileLines.add (TEXT_TO_ADD1); Для обоих из них, удаляя предыдущий и добавляя новый, все работает сейчас! = D Отлично! – user3284750

+0

@ user3284750 классный, вы можете принять этот ответ, нажав на галочку для закрытия – PopoFibo