SAX解析器无法在Windows中运行?

时间:2016-02-17 11:04:49

标签: java xml

我有多个名为media01.xml,media02.xml等的xml文件。 我编写了一个java代码,它解析这个xml文件并获取其表名并重命名xml文件。例如:media01 - > Records.xml,media02 - > Info.xml等。 部分代码如下:

 File inputFile = new File(path+File.separator+"media0"+xmlval+".xml");
     if(inputFile.exists())
     {
         try{
         SAXParserFactory factory = SAXParserFactory.newInstance();
         SAXParser saxParser = factory.newSAXParser();
         aaaa a= new aaaa();
         saxParser.parse(inputFile, a);  
         String abc = aaaa.nsList();
         File dest = new File(path+File.separator+abc+".xml");
         inputFile.renameTo(dest);
         xmlval++;
         }
         catch(Exception e)
         {
             System.err.println(""+e);
         }
     }

我正在调用的函数是:

class aaaa extends DefaultHandler {
 boolean bFirstName = false;
 boolean bLastName = false;
boolean loc = false;
 String name = null;
static String ans;


 @Override
 public void startElement(String uri,String localName, String qName, Attributes attributes)
  throws SAXException {
  if (qName.equalsIgnoreCase("table")) {
     name = attributes.getValue("name");
  }
  if(qName.equalsIgnoreCase("row")){     
  } 
  ans=name;
 }
 public static String nsList(){   
   return ans;
}
 }

我在服务器上部署了我的项目,当我从ubuntu OS运行项目时,xml文件名正在改变,但是当我从Windows运行时它没有重命名文件。可能是什么问题? 请帮助我。提前谢谢。

2 个答案:

答案 0 :(得分:0)

我不瘦,这是一个Parser问题,因为没有问题,SAXParser被很多依赖于SAX解析其配置文件的项目使用,例如Spring,jsf我认为和其他许多其他所以它不太可能是一个问题,所以问题可能是我打电话给

File dest = new File(path+File.separator+abc+".xml");
inputFile.renameTo(dest);

这是与平台相关的指令,你最好通过这样做来检查重命名是否成功完成

File dest = new File(path+File.separator+abc+".xml");
boolean renameSuccess=inputFile.renameTo(dest);
System.out.println("renaming "+renameSuccess?"succeeded":"failed");

答案 1 :(得分:0)

将在系统上测试的应用程序部署到另一个系统时遇到的问题之一是路径和文件名在类Unix系统上区分大小写。您的文件可能已存在于目标系统上,但具有不同的大小写。无论如何,正如achabahe所提到的,你应该在重命名文件时检查你的返回值。

另一个评论,路径分隔符是系统相关的,但通常Java没有任何问题。例如,您可以使用' /'在Windows路径中。我建议你以这种方式实例化File个对象:

File myFile = new File(myPath, myFileName);

这更容易阅读和独立于系统。

我还建议您跟踪是否实际打开了源文件。顺便说一下,你不能在调试模式下运行它吗?