Система не может найти указанный файл, но файл существует - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь манипулировать моим XML-файлом с именем Test.XML.

Я вижу файл в своей папке и могу открыть его.Код:

DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();            
domFactory.setIgnoringComments(true);
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse(new File("MyFolder\Test.xml"));

Я получаю эту ошибку:

java.io.FileNotFoundException: C:\MyFolder\Test.xml (The system cannot find the file specified)

Почему код не может открыть / прочитать мой файл, но другие программы, такие как Notepad ++, могут это сделать?

*** Примечание: настоящее имя файла - «Варианты использования \ testSuitesA_E_1002 + $ {user} 3_12022016 + $ {date} 2_2.5.xml».

Ответы [ 7 ]

0 голосов
/ 07 марта 2019

Пожалуйста, измените ваш код следующим образом:

ClassLoader classLoader = ClassLoader.getSystemClassLoader();
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setIgnoringComments(true);
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse(new File(classLoader.getResource("MyFolder/Test.xml").getPath()));
System.out.println(doc.getDocumentElement());

Для запуска этого кода создайте проект для файлов .class.ClassLoader должен иметь .class файлов.В противном случае он не сможет читать папки или файлы из classpath.

Примечание:

  1. new File ("MyFolder \ Test.xml ") - This will not work because you have not provided the absolute path. You have to use classloader to get file from classpath (in that case, you don't have to mention the full path). Classloader brings the full absolute path for you. Remember : java.nio.File needs absolute path for its working.

  2. If you want to read file from any arbitrary location, then you have to specify the full path for that.(assuming that you are trying to access the file outside)

0 голосов
/ 07 марта 2019
  • Я попытался разобрать файл xml внутри других папок.Это напечатано успешно.Код ниже

  • Если вам нужен абсолютный путь, вы также можете использовать Classloader для загрузки XML-файла.

    import java.io.File;
    import java.io.IOException;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import org.w3c.dom.Document;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;
    
    public class Testing {
    
        public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
            parseXmlFile();
        }
    
        private static void parseXmlFile() throws ParserConfigurationException, SAXException, IOException {
            DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
            domFactory.setIgnoringComments(true);
            DocumentBuilder builder = domFactory.newDocumentBuilder();
            Document doc = builder.parse(new File("src/main/java/xmlfiles/Test.xml"));
            if (doc.hasChildNodes()) {
                printNote(doc.getChildNodes());
    
            }
        }
    
        private static void printNote(NodeList nodeList) {
            for (int count = 0; count < nodeList.getLength(); count++) {
                Node tempNode = nodeList.item(count);
                if (tempNode.getNodeType() == Node.ELEMENT_NODE) {
                    System.out.println("Value = " + tempNode.getTextContent());
                }
    
            }
        }
    }
    

<?xml version="1.0" encoding="UTF-8"?>
<company>
	<staff id="100">
		<firstname>Tom</firstname>
		<lastname>Jerry</lastname>
		<nickname>Tomy</nickname>
		<salary>100000</salary>
	</staff>
	<staff id="200">
		<firstname>Micky</firstname>
		<lastname>Mouse</lastname>
		<nickname>Mike</nickname>
		<salary>200000</salary>
	</staff>
</company>
0 голосов
/ 06 марта 2019

Попробуйте:

    System.out.println(new File("").getAbsolutePath());

Он запишет ваш текущий рабочий каталог в консольный журнал.Затем вы можете настроить свой код следующим образом:

    System.out.println(new File("relative/path/to/File.xml").exists);

Он должен сообщить вам, существует ли файл (или каталог).Обратите внимание, что это "/", а не "\".

0 голосов
/ 05 марта 2019

Добавьте .\\ в начало имени вашего файла.

. обозначает текущий запущенный каталог

Это выглядиткак java пытается найти папку из корневой папки (C:\).Добавление . указывает java искать внутри текущего запущенного каталога, а не C:\.Более того, не используйте обратную косую черту и используйте одну косую черту:

new File("./MyFolder/Test.xml")
0 голосов
/ 04 марта 2019

Как насчет попытки Document doc = builder.parse(new File("Use-cases\\testSuitesA_E_1002+${user}3_12022016+${date}2_2.5.xml"))

В вашем пути к файлу представлены варианты использования \ t estSuitesA_E_1002 + $ {user} 3_12022016 + $ {date} 2_2.5.xml \tescape-последовательность.

Кроме того, я хотел бы проверить {date}, который вы используете, возможно, ваша дата отформатирована как 06 \ 06 \ 2018?

0 голосов
/ 04 марта 2019

У меня недавно была такая же проблема, и я обнаружил, что в моем случае файл был сохранен как «abc.txt.txt» вместо «abc.txt».

Поскольку расширение файла было скрыто, ранее я не мог видеть, что файл был сохранен с расширением, добавленным к имени.

Проверьте, сохранен ли файл с правильным расширением.

Или, так как имя вашего файла содержит «дату», это может вызвать проблемы.Проверьте, совпадает ли формат даты при доступе к файлу и имя файла.

0 голосов
/ 03 марта 2019

Похоже, вы используете относительный путь в приведенной ниже строке для доступа к файлу.

Document doc = builder.parse(new File("MyFolder\Test.xml"));

Кроме того, вы использовали одиночный '\', вместо этого используйте '//'.Вы можете выполнить отладку, используя две опции

  1. Попробуйте использовать абсолютный путь к файлу (всегда используйте «//») и увидите, что приложение имеет разрешение на доступ к файлу.Если доступ есть, тогда сформируйте правильный относительный путь из каталога, в котором выполняется программа.

  2. Если по какой-то причине ваша программа не может получить доступ к файлу, имеющему разрешение на доступ, попробуйте предоставить необходимое разрешение.

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