Удаление и переименование файлов в Java - PullRequest
2 голосов
/ 31 мая 2011

У меня есть следующий код Java, который будет искать в xml определенный тег, а затем добавит в него текст и сохранит этот файл. Я не смог найти способ переименовать временный файл в исходный файл. Пожалуйста, предложите.

import java.io.*;

    class ModifyXML {

         public void readMyFile(String inputLine) throws Exception
         {

            String record = "";

            File outFile = new File("tempFile.tmp");

            FileInputStream fis  = new FileInputStream("InfectiousDisease.xml");

            BufferedReader br = new BufferedReader(new InputStreamReader(fis));

            FileOutputStream fos = new FileOutputStream(outFile);

            PrintWriter out = new PrintWriter(fos);

            while ( (record=br.readLine()) != null ) 
            {
                 if(record.endsWith("<add-info>"))
                 {
                     out.println("    "+"<add-info>");
                     out.println("    "+inputLine);              
                 }
                 else
                 {
                     out.println(record);
                 }

            }
           out.flush();
           out.close();
           br.close();
           //Also we need to delete the original file
           //outFile.renameTo(InfectiousDisease.xml);//Not working

         }

         public static void main (String[] args) {
             try
             {
             ModifyXML f = new ModifyXML();
             f.readMyFile("This is infectious disease data");
             }
             catch(Exception e)
             {
                 e.printStackTrace();
             }
         }
    } 

Спасибо

Ответы [ 4 ]

8 голосов
/ 31 мая 2011

Сначала удалите оригинальный файл, а затем переименуйте новый файл:

File inputFile = new File("InfectiousDisease.xml");
File outFile = new File("tempFile.tmp");

if(inputFile.delete()){
   outFile.renameTo(inputFile);
}
1 голос
/ 31 мая 2011

В вашем коде есть несколько проблем.

Сначала в вашем описании упоминается переименование исходного файла и добавление в него текста. Ваш код этого не делает, он открывает два файла, один для чтения и один для записи (с дополнительным текстом). Это правильный способ сделать что-то, так как добавление текста на месте не представляется возможным при использовании техник, которые вы используете.

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

Третья проблема заключается в том, что вы изменяете файлы XML как обычный текст. Иногда это работает, поскольку XML-файлы являются подмножеством простых текстовых файлов, но нет никаких признаков того, что вы пытались убедиться, что выходной файл был XML-файлом. Возможно, вы знаете больше о своих входных файлах, чем упомянуто, но если вы хотите, чтобы это работало правильно для 100% входных случаев, вы, вероятно, захотите создать программу записи SAX, которая записывает все операции чтения SAX, с дополнительной информацией в правильное расположение тега.

1 голос
/ 31 мая 2011

Хороший способ переименования файлов:

File file = new File("path-here");
file.renameTo(new File("new path here"));
0 голосов
/ 31 мая 2011

Вы можете использовать

outFile.renameTo(new File(newFileName));

Вы должны убедиться, что эти файлы не открыты в данный момент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...