java - 从带有完整路径的cmd运行java类?
问题描述
我已经编译了一个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;
}
}
解决方案
使用 java 类路径:
java -cp C:\xampp\htdocs\xsd_validtion\ XSDValidator C:\xampp\htdocs\xsd_validtion\students.xsd C:\xampp\htdocs\xsd_validtion\students.xml
这包括类文件所在的目录到类路径。
java中的目录是包结构。这就是为什么您不能将其用作普通路径的原因
推荐阅读
- django - BaseSerializer 中的自定义验证器
- python - 尝试使用 opencv 和 tkinter 使用按钮关闭相机
- flutter - Flutter:使用TextInputFormatter时如何避免改变keyboardType?
- ios - 应用程序在 ios14 中未收到后台通知信号
- .net-core - HttpGet 与三个关系表与 dot net core web api
- cypress - 如何使用 cy.readfile() 从 Cypress 中的 JSON 文件中读取测试数据并使其在测试中可用
- flutter - 在下拉菜单颤动中显示来自 API 的数据的问题
- c# - FireBaseAdmin 与 Asp.net Core 发送图像通知
- ffmpeg - Netflix / vmaf 结果代表什么?
- python - Django:为相关模型的字段提供计数