2015-02-25 2 views
-1

Я пытаюсь заменить строку из js-файла, у которого есть такой контент ........ minimumSupportedVersion: '1.1.0', ........ теперь пытается заменить 1.1.0 на 1.1.1. Мой код выполняет поиск текста, но не заменяет его. Кто-нибудь может мне с этим помочь. Заранее спасибо.Я хочу изменить текст в файле, мой код ищет слово, но не заменяет слово

public class replacestring { 

public static void main(String[] args)throws Exception 
{ 
    try{ 
FileReader fr = new FileReader("G:/backup/default0/default.js");  
    BufferedReader br = new BufferedReader(fr); 
    String line; 
    while((line=br.readLine()) != null) { 
     if(line.contains("1.1.0")) 
     { 
      System.out.println("searched"); 
      line.replace("1.1.0","1.1.1"); 
      System.out.println("String replaced"); 
     } 

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

} 

ответ

2

Во-первых, убедитесь, что вы назначаете результат replace к чему-то, иначе он потеряется, помните, String неизменен, он не может быть изменен ...

line = line.replace("1.1.0","1.1.1"); 

Во-вторых, вам нужно будет записать изменения в файл. Я рекомендовал бы, чтобы создать временный файл, к которому вы можете написать каждый `строку и, когда закончите, удалите исходный файл и переименовать временный файл обратно на свое место

Что-то вроде ...

File original = new File("G:/backup/default0/default.js"); 
File tmp = new File("G:/backup/default0/tmpdefault.js"); 
boolean replace = false; 
try (FileReader fr = new FileReader(original); 
       BufferedReader br = new BufferedReader(fr); 
       FileWriter fw = new FileWriter(tmp); 
       BufferedWriter bw = new BufferedWriter(fw)) { 
    String line = null; 
    while ((line = br.readLine()) != null) { 
     if (line.contains("1.1.0")) { 
      System.out.println("searched"); 
      line = line.replace("1.1.0", "1.1.1"); 
      bw.write(line); 
      bw.newLine(); 
      System.out.println("String replaced"); 
     } 
    } 
    replace = true; 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
// Doing this here because I want the files to be closed! 
if (replace) { 
    if (original.delete()) { 
     if (tmp.renameTo(original)) { 
      System.out.println("File was updated successfully"); 
     } else { 
      System.err.println("Failed to rename " + tmp + " to " + original); 
     } 
    } else { 
     System.err.println("Failed to delete " + original); 
    } 
} 

например.

Вы можете также хотел бы взглянуть на The try-with-resources Statement и убедитесь, что вы управляете своими ресурсами правильно

+0

О, да, я пропустил это. Спасибо :) @MadProgrammer –

1

Если вы работаете с Java 7 или выше, используйте новый файл I/O API (ака NIO) как

// Get the file path 
Path jsFile = Paths.get("C:\\Users\\UserName\\Desktop\\file.js"); 

// Read all the contents 
byte[] content = Files.readAllBytes(jsFile); 

// Create a buffer 
StringBuilder buffer = new StringBuilder(
    new String(content, StandardCharsets.UTF_8) 
); 

// Search for version code 
int pos = buffer.indexOf("1.1.0"); 
if (pos != -1) { 
    // Replace if found 
    buffer.replace(pos, pos + 5, "1.1.1"); 

    // Overwrite with new contents 
    Files.write(jsFile, 
      buffer.toString().getBytes(StandardCharsets.UTF_8), 
      StandardOpenOption.TRUNCATE_EXISTING); 
} 

Я предполагаю, что размер файла сценария не пересекает MB; используйте классы буферизованного ввода-вывода.

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