2014-10-23 3 views
0

Я надеялся, что кто-то может объяснить, почему это не сработает и каким может быть мое решение.IOException, не находя файл

Я попытался следующие, чтобы узнать, что происходит:

String s = "\\users\\udc8\\a4471\\My Documents\\MATLAB\\blockdiagram.xml"; 
    String st = "\\"; 
    String st2 = st + s; 
    System.out.println(st2); 

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

\\users\udc8\a4471\My Documents\MATLAB\blockdiagram.xml 

Какой правильный путь к файлу. Затем я пытаюсь проанализировать этот файл с помощью SAX, и я получаю сообщение IOEXception, говорящее, что файл не существует. Я попытался использовать File и getPath(), getCanonicalPath() и getAbsolutePath(). При выполнении синтаксического анализа я получаю сообщ:

Due to an IOException, the parser could not check \\users\udc8\a4471\My Documents\MATLAB\\blockdiagram.xml 

Это код, начинающийся синтаксический:

try { 
     XMLReader parser = XMLReaderFactory.createXMLReader(); 
     parser.parse(st2); 
     System.out.println(s + " is well-formed."); 
    } 
    catch (SAXException e) { 
     System.out.println(s + " is not well-formed."); 
    } 
    catch (IOException e) { 
     System.out.println(
     "Due to an IOException, the parser could not check " 
     + s 
    ); 
    } 

Запуск аналогичной программы, которая не имеет своего собственного messege следующее messege ошибка возвращается:

java.io.FileNotFoundException: \\users\udc8\a4471\workspace\SAX Intro\users\udc8\a4471\My Documents\MATLAB\blockdiagram.xml (The system cannot find the file specified) 

файл не имеет особых ограничений (насколько я могу судить), ничего галочкой глядя на свойствах файла и я могу вручную переписать Conte нт. Любые идеи?

+0

Когда вы получите исключение, печать исключение, а не только некоторые смутное сообщение, если вы сами разрабатываете. Фактическое сообщение об исключении сообщает вам, в чем проблема. – EJP

+0

Вы действительно ожидаете, что файл будет находиться под «\\ users \ udc8 \ a4471 \ workspace \ SAX Intro \ users \ udc8 \ a4471 \ My Documents \ MATLAB \ blockdiagram.xml", если вы спросите меня, что "users \ udc8 \ a4471 «часть, кажется, дублируется – JBA

+0

@EJP messege, который я получаю, размещается дальше вниз, код разбора не является моим собственным с самого начала, поэтому я скопировал код из учебника SAX. Я только изменил части, которые важны для ввода моего файла. –

ответ

0

Возможно, это связано с тем, что ваш путь имеет в нем два \ -знака. Я рекомендую вам попробовать с вашей переменной s вместо s2, которая добавила дополнительные \ -знаки.

Чтобы быть честным, я понял, насколько меньше я знаю о путях в java, особенно когда речь идет о разных ОС.

я однако сумел заставить его работать на машине Windows, например, так:

import java.io.File; 
import java.io.IOException; 

import org.xml.sax.SAXException; 
import org.xml.sax.XMLReader; 
import org.xml.sax.helpers.XMLReaderFactory; 

public class SaXSample { 

    public static void main(String[] args) { 
     new SaXSample().run(); 
    } 

    public void run() { 

     System.out.println("This class is located under: "+getAbsolutePath()); 

     // using absolut pathd 
     String absolutPath = "D:\\temp\\Oki.xml"; 
     File f = new File(absolutPath); 
     System.out.println("Does the file exist using the absolut path? -> "+f.exists()); 
     runSaX(absolutPath); 

     // using relative path (i dont know why it knows which drive C:/, D:/ to take but my .class is running from the same drive as the .xml is in) 
     String relativePath = "\\temp\\Oki.xml"; 
     File f2 = new File(relativePath); 
     System.out.println("Does the file exist using the relative path? -> "+f2.exists()); 
     runSaX(relativePath); 

     // using a "wrong" relative path: 
     String wrongRelativePath = "\\\\temp\\Oki.xml"; 
     File f3 = new File(wrongRelativePath); 
     System.out.println("File relative path: "+f3.getPath()+" , File absolut path: "+f3.getAbsolutePath()); 
     runSaX(wrongRelativePath); 
    } 

    private void runSaX(String path) { 
     try { 
      XMLReader parser = XMLReaderFactory.createXMLReader(); 
      parser.parse(path); 
      System.out.println(path + " is well-formed."); 
     } catch (SAXException e) { 
      System.out.println(path + " is not well-formed."); 
     } catch (IOException e) { 
      System.out 
        .println("Due to an IOException, the parser could not check " 
          + path); 
     } 
    } 

    private String getAbsolutePath() { 
     java.security.ProtectionDomain pd = SaXSample.class 
       .getProtectionDomain(); 
     if (pd == null) 
      return null; 
     java.security.CodeSource cs = pd.getCodeSource(); 
     if (cs == null) 
      return null; 
     java.net.URL url = cs.getLocation(); 
     if (url == null) 
      return null; 
     java.io.File f = new File(url.getFile()); 
     if (f == null) 
      return null; 

     return f.getAbsolutePath(); 
    } 

} 

Что в моем случае приводит к этому выходу (жаль, что я не знаю, как формат вывода на консоль):

This class is located under: D:\devjba\jba\bin 

Does the file exist using the absolut path? -> true 
D:\temp\Oki.xml is well-formed. 

Does the file exist using the relative path? -> true 
\temp\Oki.xml is well-formed. 

File relative path: \\temp\Oki.xml , File absolut path: \\temp\Oki.xml 
Due to an IOException, the parser could not check \\temp\Oki.xml 

Поскольку вы указали в комментариях, что хотите выбрать определенные файлы или каталоги, я рекомендую вам взглянуть на JFileChooser. Это простой способ позволить пользователю выбрать то, что на самом деле существует, и предоставит вам абсолютный путь к выбранному файлу/файлам.

Примечание: я понятия не имею, почему в относительном пути-случае правильный диск D: используется /, а не другой C:/

+0

Что происходит в моем случае (как при выборе файла с помощью выбора файла, так и просто вводе строки). Файл f находится в пути: path = f.getSelectedFile(). AbsolutePath(); который является правильным путем, позволяет сказать «\\ users \\ udc8 \\ a4471 \\ Мои документы \\ MATLAB \\ blockdiagram.xml", тогда я получаю сообщение об ошибке java.io.FileNotFoundException: \\ users \ udc8 \ a4471 \ workspace \ SAX Intro \ users \ udc8 \ a4471 \ Мои документы \ blockdiagram.xml. Почему это добавляет \ workspace \ SAX Intro в имя пути и создает путь, который явно не существует! Входной сигнал - parser.parse (путь); –

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