【问题标题】:Java SAX read filename with metacharactersJava SAX 使用元字符读取文件名
【发布时间】:2014-01-24 14:58:05
【问题描述】:

如何读取文件名中包含元字符的文件? 例如:

  private void readDoc (String path) { 
   try {  
       SAXReader reader = new SAXReader();   
       this.doc = reader.read("_40208#1159SOV.xml");
 } catch(Exception e) {
       this.print(e.getMessage()); } }

我尝试使用:

reader.read(Pattern.quote("_40208#1159SOV.xml");

但它不起作用。想要一个不需要重命名文件的解决方案。 谢谢。

【问题讨论】:

  • 当您说“它不起作用”时,这是什么意思?你能产生程序的输出吗?
  • 它只是在文件名路径添加/Q和/E

标签: java sax dom4j


【解决方案1】:

read 将系统 ID 视为 URL。 # 表示 URL 中的锚点,因此该方法会查找名为 _40208 的不存在的文件。您可以对参数进行编码

Document doc = reader.read(URLEncoder.encode("_40208#1159SOV.xml", "UTF-8"));

文件的路径是从返回字符串的 UI 对话框 (JFileChooser) 获取的

在这种情况下,解决方案更简单:SAXReader provides an overloaded method which uses a File reference

Document doc = reader.read(filechooser.getSelectedFile());

【讨论】:

  • hmm 现在文件名打印正常,但 SAX 抛出找不到此类文件的异常..可能是我在 Windows 上工作的字符集,并且已经尝试了 windows-1251 和 windows-1252
  • 文件在你的应用路径上吗?
  • 不,文件的路径是从返回字符串的 UI 对话框获取的
  • @user1722669 那么您需要提供完整路径以及文件名
  • 是的,我明白,我使用这样的 _40208#1159SOV.xml 文件名,例如我的路径字符串包含文件的完整路径(类似于“C:\files\_40208#1159SOV.xml”)@987654330 @; // 抛出异常reader.read(path); //如果文件不包含元字符则读取文件
【解决方案2】:

在我的情况下,我找到了更简单的解决方案 reader.read(new File(path)); 无需任何 URLEncoder 即可完美运行。希望对某人有所帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多