Java 系统找不到指定的文件,但文件存在

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

我正在尝试操作名为Test.XML的XML文件

我可以在我的文件夹中看到该文件,并且可以打开它。 代码:

我得到这个错误:

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
    文件。否则,它将无法从类路径读取文件夹或文件。

    注意:

  • 新建文件(“MyFolder\Test.xml”)-
    这将不起作用,因为您没有提供绝对路径。您必须使用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());
                }
    
            }
        }
    }