2016-02-26 5 views
0

Я пытался переименовать текстовый файл в java, используя следующий код.Альтернативы функции .renameTo

tempFile.renameTo(inFile) 

Однако, похоже, что это не переименование файла.

Цель моего проекта - отредактировать строку текста в текстовом файле.
1. Сначала читает файл и сохраняет строку как oldLine.
2. Делает отредактированную строку и сохраняет ее как newLine.
3. Записывает newLine во временный файл.
4. Удаляет основной файл и переименовывает временный файл в имя основного файла.

Есть ли альтернатива этой функции переименования?

Редактировать с Полный код

try { 
     File inFile = new File("Members.txt"); 
     File tempFile = new File("MembersTemp.txt"); 

     BufferedReader BR = new BufferedReader(new FileReader(inFile)); 
     PrintWriter PW = new PrintWriter(new FileWriter(tempFile)); 

     inFile.setReadable(true); 
     inFile.setWritable(true); 
     tempFile.setReadable(true); 
     tempFile.setWritable(true); 

     String line = null; 

     while ((line = BR.readLine()) != null) { 

      if (!old.equals(newLine)) { 
       //String replace = old.replace(old, newLine); 
       PW.println(newLine); 
       PW.flush(); 
      } 
     } 

     PW.close(); 
     BR.close(); 

     if (!tempFile.renameTo(inFile)) { 
      JOptionPane.showMessageDialog(
       null, 
       "Error", 
       "Edit File", 
       JOptionPane.WARNING_MESSAGE); 
     } else { 
       JOptionPane.showMessageDialog(
       null, 
       "File saved successfully", 
       "Edit File", 
       JOptionPane.INFORMATION_MESSAGE); 
     } 

     dispose(); 
     new Edit_Member().setVisible(true); 

    } catch (IOException | HeadlessException e) { 
     e.printStackTrace(); 
     JOptionPane.showMessageDialog(
     null, 
     "Catch Error", 
     "Edit File", 
     JOptionPane.WARNING_MESSAGE); 

    } 

Обновлены Files.move

Path source = tempFile.toPath(); 
Path newdir = inFile.toPath(); 
Files.move(source, newdir, REPLACE_EXISTING); 

Приведенный выше код дает мне следующее сообщение об ошибке:

java.nio.file .FileSystemException: Member.txt: процесс не может получить доступ к файлу потому что он используется другим процессом.

Я думал, что закрыл всех своих читателей и писателей, поэтому эта ошибка действительно не должна присутствовать.

+1

Из вашего описания, это очень вероятно из-за того, что вы не правильно закрыли свой InputStream. Но нет кода, поэтому ... пожалуйста, сделайте [mcve]. – Tunaki

+0

В вашем цикле чтения файла 'newLine' не определен, вы имеете в виду' line'? – SamTebbs33

+0

Переменная newLine передается методу. Поэтому его не нужно определять. – JSmithers

ответ

0

Я не уверен, что происходит неправильно, не увидев код, но так как Java SE 7 рекомендуется переместить/переименовать файлы, это Files.move (NIO.2 File API).

+0

Работает ли это, даже если текстовые файлы находятся в одном каталоге? – JSmithers

+0

Вы писали, что сначала удаляете основной файл. Кроме того, есть опция REPLACE_EXISTING. – Puce

+0

От Javadoc: «Переместить или переименовать файл в целевой файл» – Puce

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