2014-03-19 5 views
0

У меня есть следующий код, чтобы изменить свой файл .txt в Java:Java: Как редактировать файл

public static void editInfo() throws IOException 
    { 

     Scanner inFile2 = new Scanner(new FileReader ("FileOut.txt")); 

     int id_number = Integer.parseInt(JOptionPane.showInputDialog(
       "Enter Id number to be searched: ")); 


     String copy = ""; 

     while (inFile2.hasNext()) 
      { 
      int idnumber = inFile2.nextInt(); 
      String firstname = inFile2.next(); 
      String lastname = inFile2.next(); 
      if (id_number == idnumber) 
      { 
       firstname = JOptionPane.showInputDialog("Enter First Name : "); 
       lastname = JOptionPane.showInputDialog("Enter Last Name : "); 
       copy += idnumber + " " + firstname + " " + lastname + "\n"; 
      } 
      else 
      { 
      copy += idnumber + " " + firstname + " " + lastname + "\n"; 
      } 
     } 
     add(copy); //Method that writes a string into the 
     JOptionPane.showMessageDialog(null, "Information Successfully updated" , "edit information" , JOptionPane.INFORMATION_MESSAGE); 
      inFile2.close(); 
    } 

Мой вопрос, есть ли другой более простой способ редактирования файла в Java?

+0

У ** не ** редактировать файл «на месте». Запишите содержимое во временный файл _then_ rename в исходный файл. – fge

ответ

0

Вот как вы можете сделать это с помощью нового Java 7 файлов API (хорошо, новый ... Java 8 это сейчас, так что это не то, что новый):

// Read all lines from source file 
final Path source = Paths.get("/path/to/source.txt"); 
final List<String> lines = Files.readAllLines(source, StandardCharsets.UTF_8); 

// Ask for necessary information 

// Update relevant line 
boolean found; 
int idnumber; 
String line; 
Scanner scanner; 
for (int index = 0; index < lines.size(); index++) { 
    line = lines.get(index); 
    scanner = new Scanner(line); 
    idnumber = scanner.nextInt(); 
    if (idnumber != id_number) // not the good line 
     continue; 
    found = true; 
    firstname = JOptionPane.showInputDialog("Enter First Name : "); 
    lastname = JOptionPane.showInputDialog("Enter Last Name : "); 
    lines.set(index, String.format("%d %s %s", idnumber, firstname, lastname); 
    break; // no need to go further 
} 

if (!found) { 
    JOptionPane.showMessageDialog(null, "Index not found" , "oops" , 
     JOptionPane.WARNING_MESSAGE); 
    return; 
} 

//Create a temporary file to write the modified contents 
final Path tmpfile = Files.createTempFile("temp", ".txt"); 
try (
    final BufferedWriter writer = Files.newBufferedWriter(tmpfile, 
     StandardCharsets.UTF_8); 
) { 
    for (final String line: lines) { 
     writer.write(line); 
     writer.newLine(); 
    } 
} 

// Rename to original file 
Files.move(tmpfile, source, StandardCopyOption.REPLACE_EXISTING); 
JOptionPane.showMessageDialog(null, "Information Successfully updated" , 
    "edit information" , JOptionPane.INFORMATION_MESSAGE); 
+0

Спасибо за ответ, сэр! В чем проблема сэр, если я непосредственно редактирую файл в основном текстовом файле? – toxicrain

+1

Во-первых, смещения не будут автоматически обновляться для вас; представьте, что у вас есть «привет мир», и вы пишете «до свидания» в начале, тогда в файле будет «goodbyeorld» -> коррупция. Во-вторых, даже если вы попытаетесь переписать все содержимое в том же файле, если по какой-либо причине запись не удалась, вы потеряете все: как исходное содержимое, так и модификации, которые вы хотите сделать. Вот почему вы всегда должны писать во временный файл и только потом переименовывать его в оригинал. – fge

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