我有下面的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();
}
}
}
感谢
首先删除原始文件,然后重命名新文件:
File inputFile = new File("InfectiousDisease.xml");
File outFile = new File("tempFile.tmp");
if(inputFile.delete()){
outFile.renameTo(inputFile);
}
重命名文件的一个好方法是.
File file = new File("path-here");
file.renameTo(new File("new path here"));
在您的代码中有几个问题。
首先,你的描述提到重命名原始文件并添加一些文本。你的代码没有这样做,它打开了两个文件,一个用于读取,一个用来写入(带有附加文本)。这是正确的做法,因为使用您正在使用的技术,在适当的位置添加文本是不可行的。
第二个问题是您正在打开一个临时文件。临时文件在关闭时会自动删除,因此您在添加文本时所做的所有工作在关闭文件后都会立即消失。
第三个问题是将XML文件修改为纯文本。这有时是因为XML文件是纯文本文件的子集,但没有迹象表明您试图确保输出文件是XML文件。也许您对输入文件的了解比前面提到的要多,但如果您想让它在100%的输入情况下都能正确工作,那么您可能需要创建一个SAX编写器,它可以写出SAX读取器读取的所有内容,并在正确的标记位置提供附加信息。
您可以使用
outFile.renameTo(new File(newFileName));
您必须确保这些文件当时没有打开。