Запустить java класс из cmd с полным путем? - PullRequest
0 голосов
/ 21 января 2020

У меня есть java файл

javac XSDValidator.java

И я получаю XSDValidator.class

Допустим, у меня есть файл класса (XSDValidatorc.class) в

C:\xampp\htdocs\xsd_validtion

И я пишу это в cmd

C:\xampp\htdocs\xsd_validtion> java XSDValidator students.xsd students.xml

Работает нормально. Но это не работает, если я нахожусь в другом каталоге и хочу запустить файл с абсолютным путем. Почему это не работает?

Облегчите это, допустим, я нахожусь в каталоге

C:\aaa\User\Document

И напишите так, что это не работает.

java C:\xampp\htdocs\xsd_validtion\XSDValidator C:\xampp\htdocs\xsd_validtion\students.xsd C:\xampp\htdocs\xsd_validtion\students.xml

Это java -файл

https://www.tutorialspoint.com/xsd/xsd_validation.htm
import java.io.File;
import java.io.IOException;

import javax.xml.XMLConstants;
import javax.xml.transform.stream.StreamSource;

import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;

import org.xml.sax.SAXException;

public class XSDValidator {
   public static void main(String[] args) {
      if(args.length !=2){
         System.out.println("Usage : XSDValidator <file-name.xsd> <file-name.xml>" );
      } else {
         boolean isValid = validateXMLSchema(args[0],args[1]);

         if(isValid){
            System.out.println(args[1] + " is valid against " + args[0]);
         } else {
            System.out.println(args[1] + " is not valid against " + args[0]);
         }
      }
   }

   public static boolean validateXMLSchema(String xsdPath, String xmlPath){
      try {
         SchemaFactory factory =
            SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
            Schema schema = factory.newSchema(new File(xsdPath));
            Validator validator = schema.newValidator();
            validator.validate(new StreamSource(new File(xmlPath)));
      } catch (IOException e){
         System.out.println("Exception: "+e.getMessage());
         return false;
      }catch(SAXException e1){
         System.out.println("SAX Exception: "+e1.getMessage());
         return false;
      }

      return true;

   }
}

Ответы [ 2 ]

3 голосов
/ 21 января 2020

используйте java classpath:

java -cp C:\xampp\htdocs\xsd_validtion\ XSDValidator C:\xampp\htdocs\xsd_validtion\students.xsd C:\xampp\htdocs\xsd_validtion\students.xml

Сюда входит каталог, в котором находится файл класса с classpath.

Каталоги в java являются структурами пакетов. Вот почему вы не можете использовать его как обычный путь

0 голосов
/ 21 января 2020

Ответ от Йенса

java -cp C:\xampp\htdocs\xsd_validtion\ XSDValidator C:\xampp\htdocs\xsd_validtion\students.xsd C:\xampp\htdocs\xsd_validtion\students.xml

может быть принят. Я просто хочу дать другое решение, в некоторых ситуациях лучше

CD C:\xampp\htdocs\xsd_validtion

java XSDValidator students.xsd students.xml

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