Java 系统找不到指定的文件,但文件存在
我正在尝试操作名为Test.XML的XML文件 我可以在我的文件夹中看到该文件,并且可以打开它。 代码: 我得到这个错误:Java 系统找不到指定的文件,但文件存在,java,java-io,Java,Java Io,我正在尝试操作名为Test.XML的XML文件 我可以在我的文件夹中看到该文件,并且可以打开它。 代码: 我得到这个错误: java.io.FileNotFoundException: C:\MyFolder\Test.xml (The system cannot find the file specified) 为什么代码不能打开/读取我的文件,但其他程序(如记事本+)可以这样做 ***注意:该文件的真实名称是“Use cases\testSuitesA_E_1002+${user}3_12
java.io.FileNotFoundException: C:\MyFolder\Test.xml (The system cannot find the file specified)
为什么代码不能打开/读取我的文件,但其他程序(如记事本+)可以这样做
***注意:该文件的真实名称是“Use cases\testSuitesA_E_1002+${user}3_12022016+${date}2_2.5.xml”。看起来您正在使用下面提到的行中的相对路径来访问该文件
Document doc = builder.parse(new File("MyFolder\Test.xml"));
此外,您还使用了单个“\”,而不是使用“/”。您可以使用两个选项进行调试
我最近也遇到了同样的问题,我发现在我的例子中,文件被保存为“abc.txt.txt”,而不是“abc.txt” 由于文件的扩展名是隐藏的,我之前看不到该文件是在名称中添加扩展名保存的 检查文件是否以正确的扩展名保存
或者,由于文件名中有“date”,这可能会导致问题。检查访问文件时的日期格式是否与文件名中的日期格式相同。尝试
Document doc=builder.parse(新文件(“用例\\testSuitesA_E_1002+${user}3_12022016+${date}2_2.5.xml”)
在文件路径中,
用例\testSuitesA_E_1002+${user}3_12022016+${date}2_2.5.xml\t
表示转义序列
另外,我想检查您正在使用的
{date}
,可能您的日期格式为06\06\2018?将\\\
添加到文件名的开头。
代表当前正在运行的目录看起来java正在尝试从根文件夹(
C:\
)中查找该文件夹。添加
告诉java查看当前运行的目录,而不是C:\
。更好的是,不要使用反斜杠,而是使用单个正斜杠:
new File("./MyFolder/Test.xml")
试试这个:
System.out.println(new File("").getAbsolutePath());
它将在控制台日志中写入您当前的工作目录。然后您可以按如下方式调整代码:
System.out.println(new File("relative/path/to/File.xml").exists);
它应该告诉您文件(或目录)是否存在。请注意,它是“/”而不是“\”请将您的代码修改为:
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
文件。否则,它将无法从类路径读取文件夹或文件。
注意:
这将不起作用,因为您没有提供绝对路径。您必须使用classloader从类路径获取文件(在这种情况下,您不必提及完整路径)。Classloader为您提供完整的绝对路径。请记住:java.nio.File的工作需要绝对路径。
如果要从任意位置读取文件,则必须指定该文件的完整路径。(假设您试图在外部访问该文件)
- 我试图在其他文件夹中解析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()); } } } }
导入java.io.File; 导入java.io.IOException; 导入javax.xml.parsers.DocumentBuilder; 导入javax.xml.parsers.DocumentBuilderFactory; 导入javax.xml.parsers.parserConfiguration异常; 导入org.w3c.dom.Document; 导入org.w3c.dom.Node; 导入org.w3c.dom.NodeList; 导入org.xml.sax.SAXException; 公共类测试{ 公共静态void main(字符串[]args)抛出ParserConfiguration异常、SAXException、IOException{ parseXmlFile(); } 私有静态void parseXmlFile()抛出ParserConfiguration异常、SAXException、IOException{ DocumentBuilderFactory domFactory=DocumentBuilderFactory.newInstance(); domFactory.setIgnoringComments(true); DocumentBuilder=domFactory.newDocumentBuilder(); documentdoc=builder.parse(新文件(“src/main/java/xmlfiles/Test.xml”); if(doc.hasChildNodes()){ printNote(doc.getChildNodes()); } } 私有静态void打印注释(节点列表节点列表){ 对于(int count=0;count
汤姆
杰瑞
托米
100000
米奇
老鼠
迈克
200000
它位于错误的文件夹中。“MyFolder\Test.xml”
不是有效的字符串,因为\T
不是有效的转义序列否,这不是问题所在。我要查找的真正文件不是Test.xml。我建议使用正斜杠/
。否则,您通常会在windows路径和linux路径之间遇到问题。如果您必须使用“\”,您可以使用文件(“MyFolder\\Test.xml”)
@talangle\t
在Java中是一种转义;它被解释为制表符。您应该避开反斜杠(使用\\代码>)或将其替换为/
。
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());
}
}
}
}